Least memory-intensive Collection?
除了滚动我自己的集合外,我想知道哪个现有(.NET 3.5)集合和IDictionary使用的内存量最少。
我当前正在使用
-
List
,我仅在其中添加项目,然后在其上进行迭代。 -
字典
,我仅在其中设置和获取键值对。
注意:我正在做成熟的优化。
编辑:我事先不知道大小,但是大约,字典将增长到大约789679个元素,并且该列表平均包含10-20个元素。
索引总是在空间和性能之间进行权衡。列表和字典接口的内存最少的实现始终是平面数组。当然,这意味着您的字典性能将非常糟糕,并且插入性能(无论哪种)都将变得更糟!
坦率地说,要获取10到20个元素的列表,甚至都不要调查。只需使用
即使789679也并不庞大。但是,如果您的重点是内存,那么简单地对数据进行预排序可能是您的最佳选择。然后,您可以使用二进制搜索来找到项目。它没有哈希表实现快,但内存却少得多:只有2个数组(或一个元组数组)。换句话说:使用
您可以以CPU周期为代价来节省一些内存:
1 2 3 4 5 6 | int[] data; { List<int> temp = ....; // fill the list data = temp.ToArray(); } |
如果事先知道元素的数量,则可以省去一些步骤。
字典不是那么容易替换。