除了滚动我自己的集合之外,我想知道哪个现有的(.NET 3.5)Collection和IDictionary使用最少的内存。
我目前正在使用
注意:我正在进行成熟的优化。
编辑:我事先并不知道这个大小,但大约有,字典会增长到大约789679个元素,而且这个列表平均会包含10到20个元素。
答案 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();
}
如果您事先知道元素数量,则可以省略几个步骤。
字典不是那么容易替换的。