3

我有一个处理大约 10.000 个不可变对象的 C# 应用程序,每个对象的大小为 50KB - 1MB。该应用程序为每个操作挑选大约 10-100 个对象。选择哪些对象取决于环境和用户选择,但有一些是非常常用的。

将所有对象一直保存在内存中是太多了,但是磁盘访问时间很紧迫。我想使用基于流行度的缓存来减少磁盘活动。缓存将包含最大值。300 个对象。我希望在使用模式期间决定应该缓存哪一个。我可以轻松地为每个对象添加访问计数器。更受欢迎的进入,不太受欢迎的必须离开缓存。有没有一种简单、巧妙的方法来做到这一点,而无需编码我的屁股?

4

4 回答 4

1

一种现成的解决方案是使用 ASP.NET 缓存的滑动到期窗口

于 2012-04-17T12:58:40.847 回答
1

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

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

于 2012-04-17T13:04:04.983 回答
1

我会选择WeakReferences:您可以在几分钟内构建一个简单的缓存管理器,然后让 .NET 自己处理实际的内存管理。

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

于 2012-04-17T13:04:28.467 回答
0

听起来像是 MemCached 的工作!这是一个免费、开源、高性能和灵活的缓存解决方案。您可以在http://www.memcached.org下载它。

要获得广泛的概述,请查看位于https://en.wikipedia.org/wiki/Memcached的 Wikipedia 页面。

祝你好运!

于 2012-04-17T13:05:10.467 回答