最少的内存密集型收藏?

时间:2012-07-18 08:14:05

标签: c# .net optimization collections memory-optimization

除了滚动我自己的集合之外,我想知道哪个现有的(.NET 3.5)Collection和IDictionary使用最少的内存。

我目前正在使用

  • 列出< int&gt ;,我只添加项目,然后迭代它。
  • Dictionary< int,int>,其中我只设置并获取键值对。

注意:我正在进行成熟的优化。

编辑:我事先并不知道这个大小,但大约有,字典会增长到大约789679个元素,而且这个列表平均会包含10到20个元素。

2 个答案:

答案 0 :(得分:3)

索引总是在空间和性能之间进行权衡。列表和字典界面的内存密集度最低的实现始终是一个平面数组。当然,这意味着您的词典性能将可怕,并且插入性能(对于任何一种)将更糟

对于10-20个元素的列表,坦率地说:甚至不调查。只需使用List<T>即可。对于这样一个完全无足轻重的数据量,没有明智的问题需要回答。

即使是789679并不是很大。但是,如果你强调的是内存,那么简单地预先排序数据可能是你最好的选择。然后,您可以使用二进制搜索来查找项目。不如哈希表实现快,但内存少得多:只有2个数组(或单个元组数组)。换句话说:使用SortedList<TKey,TValue>

答案 1 :(得分:2)

您可以以CPU周期为代价节省一些内存:

int[] data;
{
   List<int> temp = ....;
   // fill the list
   data = temp.ToArray();
}

如果您事先知道元素数量,则可以省略几个步骤。

字典不是那么容易替换的。