我们有一个应用程序,它在几个 s 中保存大量对象Dictionary
,其中一些对象在应用程序的生命周期内不断增长(具有大量工具的交易应用程序和不断增长的订单/交易)。
OutOfMemoryException
由于大对象堆的碎片,我们遇到了s 的问题。
为了解决这个问题,我尝试编写一个“大”字典,它被实现为一个两级字典,其中所有叶字典都不够大,无法在 LOH 上分配。我使用了一致的散列算法来避免当单个存储桶变得太大时必须重新散列整个字典。一致的散列“圆圈”TreeDictionary
来自 C5 集合库。
我的问题是,对于 C# 是否有更好的数据结构(或者可能是我所描述的更好的实现)?
更新
这是“大”字典的实现:https ://gist.github.com/956621
我知道这不是万无一失的,因为规范中既没有 LOH 堆阈值,也没有每个 Dictionary 条目的大小或缩放算法。但是,这是目前我能想到的最好的方法,以避免应用程序在中午崩溃。