优化长集合

时间:2019-12-31 06:50:40

标签: c# nosql litedb

我有一个存储在集合中的类:

public class Message {
    public string Id => $"{ChannelId}-{MessageId}";
    public long ChannelId { get; set; }
    public long MessageId { get; set; }
    public string Text { get; set; }
    ...
}

MessageID可以重复,ChannelID是唯一的。

对于测试,我向集合中添加了70万条随机消息。但我认为现实中还会有更多。

现在,通过标识符接收特定的消息需要70毫秒,而从MessageID和ChannelID总共需要140毫秒。

鉴于元素数量会增加,我该如何优化呢?

它不能只是将所有内容都放入一个集合中,例如:

  • 为频道创建新集合以创建频道类,然后在
  • 它存储与此频道相关的所有消息吗?

1 个答案:

答案 0 :(得分:1)

如果您只需要一个组合的Dictionary Key,那么它将做到:

var allMessages = new List<Message>()
{
    // channelId, messageId, text
    new Message(1, 1, "Message1"),
    new Message(1, 2, "Message2"),
    new Message(2, 1, "Message3")
};

var lookup = allMessages.ToDictionary(x => x.Id, x => x);

// to find an entry by (channelId, messageId)
var id = $"{1}-{2}"; // keep in sync with your Message.Id()
var myItem = lookup[id];

// make sure to remove / add an entry from the dict before / after you change it