在我的应用程序中,我使用了一个字典(支持添加、删除、更新和查找),其中键和值都可以序列化或可以序列化(值可能是非常大的对象图)。当字典变得如此之大以至于将其完全保存在内存中时,我开始偶尔触发OutOfMemoryException
(有时在字典方法中,有时在代码的其他部分中)。
在尝试用数据库完全替换字典后,性能下降到无法接受的水平。
对字典使用模式的分析表明,通常一小部分值是“热的”(经常访问),其余的(大部分)是“冷的”(很少或从不访问)。很难说何时添加新值是热的还是冷的,此外,随着时间的推移,某些值可能会在冷热部分之间来回迁移。
我认为我需要一个字典的实现,该字典能够在内存不足事件时将其冷值刷新到磁盘,然后按需重新加载其中一些并将它们保留在内存中,直到下一个内存不足事件发生时它们的热/冷状态将被重新评估。理想情况下,实现应该根据应用程序中的内存使用情况巧妙地调整其冷热部分的大小和刷新间隔,以最大限度地提高整体性能。因为应用程序中存在多个字典实例(具有不同的键/值类型),我认为他们可能需要协调他们的工作流程。
您能否建议如何实施这样的字典?