我正在编写一个我创建的开源项目的文档,后来称为
WebCacheHelper.它是System.Web.Caching中现有Cache功能之上的抽象.
当服务器内存不足时,我无法找到用于清除缓存的算法的详细信息.
我在MSDN发现了这个文字:
When the Web server hosting an ASP.NET application runs low on memory,
the Cache object selectively purges items to free system memory. When
an item is added to the cache, you can assign it a relative priority
compared to the other items stored in the cache. Items to which you
assign higher priority values are less likely to be deleted from the
cache when the server is processing a large number of requests,
whereas items to which you assign lower priority values are more
likely to be deleted.
这对我的口味来说仍然有点模糊.我想知道还有哪些因素可用于确定何时清除缓存对象.它是上次访问时间和优先级的组合吗?
最佳答案 我们来看看源代码.清除从CacheSingle类中的TrimIfNecessary()方法开始.首先,它尝试删除CacheExpires类的FlushExpiredItems()方法中的所有过期项.如果这还不够,它会开始迭代CacheUsage.FlushUnderUsedItems()中的“桶”.根据CacheItemPriority将缓存使用数据/统计信息划分为“桶”,并在每个桶中单独处理它们的统计信息/ LRU.通过存储桶进行两次迭代.第一次迭代仅删除新添加的项目(在最后10秒内).第二个删除其他项目.它开始从CacheItemPriority.Low存储桶及其LRU项目中删除项目.它在被移除时停止,否则继续到下一个LRU项目和更高优先级的桶.它不会触及CacheItemPriority.NotRemovable项,因为它不会将它们添加到使用桶中.