2010-04-30 59 views
5

我正在使用字典來存儲數據,並將緩存它。我希望避免服務器內存問題,並通過限制字典大小或條目數限制詞典的大小來獲得良好的性能。
這樣做的最好方法是什麼?除了詞典以外,我還有其他課程嗎?C#字典性能

回答

2

還有其他幾類可以從像

你可以通過查看System.Collections.Generic命名空間查看選項中進行選擇。

他們是一個很好的職位,describibg優點和所有大部分集合類的優缺點在MSDN

如果你沒有被什麼這些類提供滿意的,你可以去你自己的收藏課或者設計一個你自己的custom Dictionary

您需要繼承自定義字典fron IDictionary接口和其他類/接口,或者可以從頭開始編寫所有的類。

這是在MSDN

[SerializableAttribute] 
[ComVisibleAttribute(false)] 
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, 
    ICollection<KeyValuePair<TKey, TValue>>, 
    IEnumerable<KeyValuePair<TKey, TValue>>, 
    IDictionary, ICollection, IEnumerable, 
    ISerializable, IDeserializationCallback 
+0

我不需要排序。字典對我來說效果很好,因爲我可以通過鍵獲得價值。我主要關心的是字典可能增長的規模。 – derek 2010-04-30 13:38:07

+0

我剛剛給你一些更多的選擇來看看。爲什麼不用你自己的字典和'overright'來生成它的增長規則呢? – 2010-04-30 13:43:32

+0

偉大的鏈接。看起來我將不得不創建一個自定義類。 – derek 2010-04-30 14:22:26

5

您不需要限制字典的大小即可獲得良好的性能。

由於文件說:

通過使用它的關鍵是檢索值 非常快,接近O(1)

+2

如果允許字典無限地增長,你能結束使用所有可尋址內存。依賴於硬件,您可能會或可能不會遇到性能問題,因爲在此之前就已經交換了很久。 – 2010-04-30 13:45:56

0

有一點要記住的是,當你初始化一個字典,你可以設置初始容量。如果你知道你的列表有多大,請將其設置爲正確的大小,並且不會有任何「浪費」的空間。如果您未指定容量,則會設置默認啓動容量並根據需要調整大小/增大容量,這會影響性能。

+0

的大小將是可變的,所以它的增長是我最關心的問題。我想限制最大容量,因爲它將存儲在服務器的緩存中。這將成爲Web應用程序的一部分。 – derek 2010-04-30 13:35:42

+0

指定初始大小不會限制大小。 – Rolf 2015-02-02 15:35:33

1

您需要創建自己的類從字典類繼承了Dictionary class簽名。覆蓋Add和Set Item方法,以限制添加對象時的條目數量。 「

1

」沒有過期策略的緩存只是內存泄漏。「

(對不起,未歸屬的,因爲我不知道是誰第一個說的。)

+0

緩存確實有一個非滑動過期策略和一個依賴項,只是想確保它在該過期窗口內不會變得太大。 – derek 2010-04-30 15:34:04