【问题标题】:What caching algorithm does ASP.Net use?ASP.Net 使用什么缓存算法?
【发布时间】:2013-01-30 06:34:26
【问题描述】:

我正在围绕 ASP.Net 的缓存编写一个包装器,我很好奇他们使用什么缓存算法。例如,假设缓存中的所有内容都具有相同的到期日期和优先级,它如何清除项目?

Wikipedia 列出了 11 种不同的缓存算法。 ASP.Net 是否使用其中之一?

【问题讨论】:

  • +1 个有趣的问题将等待查看答案

标签: asp.net .net algorithm caching asp.net-caching


【解决方案1】:

您描述的算法用于确定何时从缓存中删除项目,当它变满时。但是,ASP.NET 缓存没有固定容量 - 它位于堆上,因此它的大小不受限制。

缓存内部有一个定时计时的计时器。在每个滴答声中,它都会查找过期项目并将其删除。如果一个项目有一个滑动过期,那么每个缓存获取都会增加它的生命周期,否则它会被删除。

更新:

我已经完成了 Cache 类,事实上,当“内存压力”变得太高时,有一个逻辑可以删除一定比例的最少使用项目。如果您转到 System.Web.UI.Caching.CacheMemoryStats.GetPercentToTrim()CacheCommon.CacheManagerThread(Int32),您可以在 Reflector 中看到这一点。 UsageBucket 类中有一些非常复杂的逻辑,我现在无法理解,但是如果方法的名称可以通过它似乎不是任何特殊的奇异缓存算法,而是基于最不常用的算法。

所以我想我错了:)

【讨论】:

  • 那么如果内存不足会怎样呢?我认为 ASP.Net 通常对缓存内存使用有一个自适应“限制”,以避免阻塞机器(和它本身)上的其他进程
猜你喜欢
  • 2011-10-11
  • 2020-05-16
  • 2011-07-02
  • 1970-01-01
  • 2010-09-07
  • 2014-09-05
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
相关资源
最近更新 更多