2011-08-20 85 views
0

這個問題可能已被要求在不同的格式,但對於我目前的需求可以有人提出這是最好的..asp.net自定義資源提供使用詞典/ SortedList/SortedDictionary?

在ASP.Net我有我自己的執行地方&全球資源,我存儲靜態Dictionary對象中的鍵值對,最多可以有10,000個值(所有頁面)。當asp.net應用程序加載一個頁面時,它將值存儲在我的靜態字典對象中。當再次訪問頁面而不是從資源文件中讀取值時,它將從靜態Dictionary對象中提供。

我的問題是性能的原因解釋是最好的,或者我應該去與排序列表/ SortedDictionary

+0

爲什麼你需要排序?如果您始終通過鍵訪問值,那麼SortedList **必須重新排列創建,插入和刪除**中的所有索引的順序,這樣做不會有任何優勢,但性能會更差。唯一的優點是您可以通過鍵或索引訪問它,並且在枚舉DictionaryEntries時按鍵獲得正確的排序順序。 –

+0

我不需要排序,我的想法是,如果記錄按照排序順序存儲,而獲取單個值則會更快。我不確定它在內部使用的算法 – user841683

+1

它存儲在字典類型中的位置並不重要。它們可以通過密鑰直接訪問,就像地址一樣。留在詞典。如果你想了解更多有關算法的信息,請看看[這個SO-answer](http://stackoverflow.com/questions/1427147/sortedlist-sorteddictionary-and-dictionary/1427158#1427158)。 –

回答

1

排序會增加開銷,因此,如果您不需要排序,你只是尋找了從單頁基於密鑰的字典,然後我會堅持字典。

從你的場景中,我認爲查找速度是最重要的關注點。

SortedDictionary使用紅黑樹,這是一種二叉樹,可在添加/刪除項目時保持集合的順序。所以如果你正在尋找值的範圍,集合中一個項目相對於另一個項目的位置是重要的,那麼SortedDictionary是有意義的。在你可能需要使用索引(如數組)而不是密鑰訪問集合的情況下,SortedList是有意義的。

Dictionary使用散列表來散列和存儲用於查找的密鑰,因此它可以快速查找隨機的單個項目。這符合你的情況。

SortedDictionary按O(log n)的順序進行添加/查找操作,其中Dictionary操作O(1)以進行添加/查找。

請參閱a comparison of the System.Collections.Generic collections

+0

排序是在添加/刪除或檢索時完成的? – user841683

+1

排序是在添加/插入/刪除時完成的,但是後備存儲是一種不同的機制,適用於不同的操作。我會用細節更新我的答案。 – nekno

相關問題