我有一个C#应用程序,它处理大约10.000个不可变对象,每个对象大小为50KB - 1MB。 该应用程序为每个操作选择大约10-100个对象。挑选哪些对象取决于环境和用户选择,但有一些经常被使用。
将所有对象一直保留在内存中,实在太多了,但磁盘访问时间紧迫。我想使用基于流行度的缓存来减少磁盘活动。缓存将包含最大值。 300个物体。我希望在使用模式期间决定应该缓存哪一个。我可以轻松地为每个对象添加访问计数器。越流行的人不得不离开缓存。如果不编码我的屁股,有没有一种简单,巧妙的方法可以做到这一点?
答案 0 :(得分:1)
一个现成的解决方案是使用ASP.NET缓存的sliding expiration window。
答案 1 :(得分:1)
你可以使用System.Runtime.Caching。缓存经常使用的对象,如果cahced对象在一段时间后发生更改,则可以指定缓存有效的时间。一旦cahce无效,在事件处理程序中就可以重建缓存。
确保在重建缓存时使用一些线程同步机制。
答案 2 :(得分:1)
我选择WeakReferences:您可以在几分钟内构建一个简单的缓存管理器,让.NET自己处理实际的内存管理。
如果您需要限制程序使用的内存量,这可能不是最好的解决方案,但绝对值得一试。
答案 3 :(得分:0)
听起来像是MemCached的工作!这是一个免费,开源,高性能和灵活的缓存解决方案。您可以在http://www.memcached.org下载。
要获得广泛的概述,请查看https://en.wikipedia.org/wiki/Memcached上的维基百科页面。
祝你好运!