我有一个存储在集合中的类:
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毫秒。
鉴于元素数量会增加,我该如何优化呢?
它不能只是将所有内容都放入一个集合中,例如:
答案 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