内存占用最少的集合



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

我目前正在使用

  • 列表<int>;,其中我只添加项目,然后对其进行迭代
  • 词典<int,int>,其中我只设置和获取键值对

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

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

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

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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新