除了滾動我自己的集合,我想知道哪些現有(.NET 3.5)集合和IDictionary使用最少的內存量。最少記憶密集型收藏?
我目前使用
- 列表<INT>,在這裏我只是添加項目,後來迭代它。
- 詞典< int,int >,其中我只設置並獲取鍵值對。
注:我正在做成熟的優化。
編輯:我不知道大小,但大約,字典將增長到約789679元素和列表將包含平均10-20元素。
除了滾動我自己的集合,我想知道哪些現有(.NET 3.5)集合和IDictionary使用最少的內存量。最少記憶密集型收藏?
我目前使用
注:我正在做成熟的優化。
編輯:我不知道大小,但大約,字典將增長到約789679元素和列表將包含平均10-20元素。
您可以在CPU週期的成本節省一些內存:
int[] data;
{
List<int> temp = ....;
// fill the list
data = temp.ToArray();
}
當你知道的元素數事先就可以消除了幾步。
字典不容易替換。
索引始終是空間和性能之間的折衷。列表和字典接口的最少內存密集型實現始終是平面陣列。當然,這意味着你的字典性能將會是可怕的,並且插入性能(對於任一個)將是差!
對於10-20個元素的列表,坦率地說:甚至不要調查。只需使用List<T>
即可。對於這樣一個極其瑣碎的數據量來說,沒有明智的問題需要回答。
即使789679也不是很大。然而,如果你的重點是內存,那麼簡單地預先排序數據可能是你最好的選擇。然後,您可以使用二進制搜索來查找項目。不如哈希表實現快,但內存少得多:只有2個數組(或一組元組)。換句話說:使用SortedList<TKey,TValue>
有多少元素(平均)?你事先知道尺碼嗎? – 2012-07-18 08:21:51
我已經更新了這個問題。 – Howie 2012-07-18 08:27:35