我正在围绕 ASP.Net 的缓存编写一个包装器,我很好奇他们使用什么缓存算法。例如,假设缓存中的所有内容都具有相同的到期日期和优先级,它如何清除项目?
维基百科列出了 11 种不同的缓存算法。ASP.Net 是否使用其中之一?
您描述的算法用于确定何时在缓存变满时从缓存中删除项目。然而,ASP.NET 缓存没有固定容量 - 它位于堆上,因此它的大小不受限制。
缓存内部有一个以固定频率计时的计时器。在每个滴答声中,它都会查找过期项目并将其删除。如果一个项目有一个滑动到期,那么每个缓存获取都会增加它的生命周期,否则它会被删除。
更新:
我已经完成了 Cache 类,事实上,当“内存压力”变得太高时,有一个逻辑可以删除一定比例的最少使用项目。如果您转到System.Web.UI.Caching.CacheMemoryStats.GetPercentToTrim()
和 ,您可以在 Reflector 中看到这一点CacheCommon.CacheManagerThread(Int32)
。类中有一些非常复杂的逻辑UsageBucket
,我现在无法理解,但是如果方法的名称是可以使用的,那么它似乎不是任何特殊的奇异缓存算法,而是基于最不频繁的算法- 使用算法。
所以我想我错了:)