在内存中保留大量复杂的对象

时间:2011-05-18 01:54:22

标签: c# linq memory-management

我希望始终有大约20,000个复杂对象驻留在内存中(应用程序将以无限循环方式运行)。我正在考虑使用List<MyObject>,然后将列表转换为Dictionary<int, MyObject>或者只是完全避免List并将对象保留在字典中。我想知道,每次我需要查找一个对象时,将列表转换为字典是否很昂贵?什么会更好?是否始终将它们存储为字典?或者有List并使用lambdas来获取所需的对象?或者我应该看看其他选项吗?

请注意,当对象检索导致出列时,我不需要队列或堆栈行为。

提前致谢。

2 个答案:

答案 0 :(得分:2)

对列表使用lambda查找是O(N),对于20,000个项目是不可忽视的。但是,如果您知道您将始终需要通过已知密钥获取对象,则可以使用O(1)字典 - 这与算法一样快。因此,如果有某种方法可以构建您的数据/应用程序,以便您可以围绕某种可预测,可重复,唯一的密钥进行检索,从而最大限度地提高性能。最糟糕的事情(从性能角度来看)是针对列表的一些复杂的查找例程,但有时它是不可避免的。

答案 1 :(得分:2)

无论您正在做什么,如果您需要访问List,那么您将需要遍历它以找到您想要的任何内容。

如果您需要访问Dictionary,则可以选择使用键值立即检索您要查找的内容,或者,如果必须,您仍然可以遍历{{1} } Values

只需使用Dictionary