关于c#:最低内存密集型集合?

Least memory-intensive Collection?

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

我当前正在使用

  • List ,我仅在其中添加项目,然后在其上进行迭代。
  • 字典,我仅在其中设置和获取键值对。

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

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


索引总是在空间和性能之间进行权衡。列表和字典接口的内存最少的实现始终是平面数组。当然,这意味着您的字典性能将非常糟糕,并且插入性能(无论哪种)都将变得更糟!

坦率地说,要获取10到20个元素的列表,甚至都不要调查。只需使用List<T>。对于如此微不足道的数据量,没有明智的问题要回答。

即使789679也并不庞大。但是,如果您的重点是内存,那么简单地对数据进行预排序可能是您的最佳选择。然后,您可以使用二进制搜索来找到项目。它没有哈希表实现快,但内存却少得多:只有2个数组(或一个元组数组)。换句话说:使用SortedList<TKey,TValue>


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

1
2
3
4
5
6
int[] data;
{
   List<int> temp = ....;
   // fill the list
   data = temp.ToArray();
}

如果事先知道元素的数量,则可以省去一些步骤。

字典不是那么容易替换。