2

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

我目前正在使用

  • List<int>,我只添加项目并稍后对其进行迭代。
  • Dictionary<int,int>,我只设置和获取键值对。

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

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

4

2 回答 2

3

索引始终是空间和性能之间的权衡。列表和字典接口的内存占用最少的实现始终是平面数组。当然,这意味着您的字典性能会很糟糕,并且插入性能(对于任何一个)都会更差

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

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

于 2012-07-18T08:50:41.993 回答
2

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

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

当您事先知道元素的数量时,您可以省去几个步骤。

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

于 2012-07-18T08:19:08.023 回答