System.Web.Caching是否使用LRU算法?

时间:2014-06-04 18:20:59

标签: asp.net .net caching lru

我正在处理一个名为WebCacheHelper的创建的开源项目的文档。它是System.Web.Caching中现有Cache功能之上的抽象。

当服务器内存不足时,我无法找到用于清除缓存的算法的详细信息。

我在MSDN上找到了这个文字:

  

托管ASP.NET应用程序的Web服务器内存不足时,   Cache对象有选择地清除项目以释放​​系统内存。什么时候   一个项目被添加到缓存中,您可以为其分配相对优先级   与存储在缓存中的其他项目相比。你的物品   分配较高优先级的值不太可能从中删除   当服务器处理大量请求时缓存,   而您分配较低优先级值的项目更多   可能被删除。

这对我的口味仍然有点模糊。我想知道还有哪些因素可用于确定何时清除缓存对象。它是上次访问时间和优先级的组合吗?

1 个答案:

答案 0 :(得分:2)

我们来看看源代码。清除从TrimIfNecessary()类中的CacheSingle方法开始。首先,它尝试删除FlushExpiredItems()类的CacheExpires方法中的所有过期项。如果这还不够,它会开始迭代CacheUsage.FlushUnderUsedItems()中的“桶”。缓存使用数据/统计信息根据CacheItemPriority划分为“存储桶”,并在每个存储桶中单独处理其统计信息/ LRU。通过存储桶进行两次迭代。第一次迭代仅删除新添加的项目(在最后10秒内)。第二个删除其他项目。它开始从CacheItemPriority.Low存储桶及其LRU项目中删除项目。它在被移除时停止,否则继续到下一个LRU项目和更高优先级的桶。它不会触及CacheItemPriority.NotRemovable项,因为它不会将它们添加到使用桶中。