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