我們有一個應用程序,其中包含大量的對象在幾個Dictionary
s,其中一些在應用程序的生命週期中不斷增長(交易應用程序與大量的工具和不斷增長的訂單/交易)。大對象堆友好IDictionary
由於大對象堆的碎片化,我們在OutOfMemoryException
上遇到了問題。
爲了解決這個問題,我試着編寫一個'大'字典,它是作爲一個兩級字典實現的,其中所有的葉子字典都不足以在LOH上分配。我使用了一致的哈希算法,以避免當單個桶變得太大時不得不重新哈希整個字典。來自C5集合庫的一致哈希'circle'是TreeDictionary
。
我的問題是,C#有沒有更好的數據結構(或者我所描述的更好的實現)?
更新
這是「大」的字典執行:我理解爲無論是LOH堆閾值是在規範它不是萬無一失https://gist.github.com/956621
,也不是每個字典條目的大小或縮放算法。然而,這是目前我能想到的最好的方法,以避免應用程序在中午時被炸燬。
這可能有助於說明您在現有實施中看到了哪些問題? – 2011-05-05 04:29:27
如果您將字典用作平面對象的鍵值存儲,則可以考慮使用內存映射文件。 – hsmiths 2011-05-05 04:49:53
您是否證實了您沒有在任何地方「泄漏」內存(如持有的引用「內存泄漏」) – 2011-05-05 04:59:20