基于流行度的缓存解决方案

3
我有一个处理大约10,000个不可变对象的C#应用程序,每个对象大小为50KB-1MB。 应用程序每次操作会选择大约10-100个对象。所选对象取决于情况和用户选择,但有一些对象非常常用。
将所有对象都保留在内存中太浪费资源了,但是磁盘访问时间又很紧迫。我想使用基于流行度的缓存来减少磁盘活动。缓存最多包含300个对象。 我期望在使用模式中决定哪些应该被缓存。我可以轻松地为每个对象添加访问计数器。 更受欢迎的对象被缓存,不太受欢迎的对象必须离开缓存。有没有一种简单而巧妙的方法可以做到这一点,而不需要编写太多代码?
4个回答

1

1

你可以使用System.Runtime.Caching。缓存那些经常使用的对象,如果缓存的对象在一段时间后发生了变化,你可以指定缓存的有效时间。一旦缓存失效,在事件处理程序中你可以重建缓存。

在重建缓存时,请确保使用一些线程同步机制。


1
不要重复造轮子,这很重要。可能需要知道 OP 想要使用滑动过期,这将优先保留缓存中最常用的项目。 - Chris Shain

1

我建议使用弱引用: 你可以在几分钟内在其上构建一个简单的缓存管理器,让.NET自己处理实际的内存管理。

如果你需要限制程序使用的内存量,这可能不是最佳解决方案,但除此之外,它绝对值得一试。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接