在我的应用程序中,我使用字典(支持添加,删除,更新和查找),其中键和值都可以或可以被序列化(值可能是非常大的对象图).当字典变得如此之大以至于将其完全保存在内存中时偶尔会触发OutOfMemoryException(有时在字典方法中,有时在代码的其他部分中),我来到了这一点.
尝试用数据库完全替换字典后,性能下降到不可接受的水平.
对字典使用模式的分析表明,通常较小部分的值是"热"(经常访问),其余(较大部分)是"冷"(很少或从不访问).如果新值加热或冷,很难说何时添加新值,而且,随着时间的推移,某些值可能会在热部件和冷部件之间来回移动.
我认为我需要一个能够在低内存事件中将其冷值刷新到磁盘的字典的实现,然后根据需要重新加载其中的一些并将它们保留在内存中,直到它们发热时发生下一个低内存事件/冷状态将被重新评估.理想情况下,实现应根据应用程序中的内存使用情况,整齐地调整其冷热部件的大小和刷新间隔,以最大限度地提高整体性能.因为应用程序中存在多个字典实例(具有不同的键/值类型),我认为,他们可能需要协调他们的工作流程.
你能建议如何实施这样的字典吗?
我有一个包含数千个文件的文件夹(可能带有嵌套的子文件夹),其中一些是DLL,其中一些是.NET程序集.我需要找到包含与特定模式匹配的类型/成员的所有程序集(例如"*Collection",或"Create*").最好(最快)的方法是什么?
建议开源库是可以的,只要它们的使用不需要打开我的源代码.