除了滚动我自己的集合之外,我想知道哪个现有的(.NET 3.5)集合和 IDictionary 使用的内存最少。
我目前正在使用
- List<int>,我只添加项目并稍后对其进行迭代。
- Dictionary<int,int>,我只设置和获取键值对。
注意:我正在做成熟的优化。
编辑:我事先不知道大小,但大约,字典将增长到大约 789679 个元素,并且列表平均包含 10-20 个元素。
除了滚动我自己的集合之外,我想知道哪个现有的(.NET 3.5)集合和 IDictionary 使用的内存最少。
我目前正在使用
注意:我正在做成熟的优化。
编辑:我事先不知道大小,但大约,字典将增长到大约 789679 个元素,并且列表平均包含 10-20 个元素。
索引始终是空间和性能之间的权衡。列表和字典接口的内存占用最少的实现始终是平面数组。当然,这意味着您的字典性能会很糟糕,并且插入性能(对于任何一个)都会更差!
对于 10-20 个元素的列表,坦率地说:甚至不要调查。只需使用List<T>
. 对于如此微不足道的数据量,没有任何明智的问题需要回答。
甚至 789679 也不大。但是,如果您的重点是内存,那么简单地对数据进行预排序可能是您最好的选择。然后,您可以使用二进制搜索来查找项目。不如哈希表实现快,但内存少得多:只有 2 个数组(或单个元组数组)。或者换句话说:使用SortedList<TKey,TValue>
您可以以 CPU 周期为代价节省一些内存:
int[] data;
{
List<int> temp = ....;
// fill the list
data = temp.ToArray();
}
当您事先知道元素的数量时,您可以省去几个步骤。
字典不是那么容易替换的。