数秒で多数のオブジェクトを保持するアプリケーションがありDictionary
、そのうちのいくつかはアプリの有効期間中に継続的に成長します (多くの商品と継続的に成長する注文/取引を伴う取引アプリケーション)。
OutOfMemoryException
大きなオブジェクト ヒープの断片化が原因で、s に問題が発生しています。
これに対抗するために、すべてのリーフ ディクショナリが LOH に割り当てられるほど大きくない 2 レベルのディクショナリとして実装される「大きな」ディクショナリを作成しようとしました。単一のバケットが大きくなりすぎたときに辞書全体を再ハッシュする必要がないように、一貫したハッシュ アルゴリズムを使用しました。コンシステント ハッシュ「サークル」はTreeDictionary
、C5 コレクション ライブラリからのものです。
私の質問は、C# 用のより良いデータ構造 (または、おそらく私が説明したもののより良い実装) はありますか?
アップデート
これは「大きな」辞書の実装です: https://gist.github.com/956621
LOH ヒープのしきい値も、各ディクショナリ エントリまたはスケーリング アルゴリズムのサイズも仕様に含まれていないため、絶対確実ではないことは理解しています。ただし、これは現在、アプリケーションが日中に爆発するのを避けるために考えられる最善の方法です.