我注意到 ASP.NET 缓存项每 20 秒检查一次(并可能被删除)(奇怪的是每次在 HH:MM:00、HH:MM:20 和 HH:MM:40 处)。我花了大约 15 分钟寻找如何更改此参数但没有成功。我还尝试在 web.config 中设置以下内容,但没有帮助:
<cache privateBytesPollTime="00:00:05" />
我不想做任何疯狂的事情,但是如果我的应用程序是 5 秒而不是 20 秒或至少 10 秒,那就太好了。
最佳答案
使用 Reflector 四处查看会发现该间隔是硬编码的。到期由内部处理 CacheExpires
类,其静态构造函数包含
_tsPerBucket = new TimeSpan(0, 0, 20);
_tsPerBucket
是 readonly
,所以不能有任何配置设置可以在以后修改它。然后在
CacheExpires.EnableExpirationTimer()
中设置将触发过期项目检查的计时器。 ...DateTime utcNow = DateTime.UtcNow;
TimeSpan span = _tsPerBucket - new TimeSpan(utcNow.Ticks % _tsPerBucket.Ticks);
this._timer = new Timer(new TimerCallback(this.TimerCallback), null,
span.Ticks / 0x2710L, _tsPerBucket.Ticks / 0x2710L);
span
的计算确保计时器恰好在 :00、:20、:40 秒触发,但我看不出有任何理由打扰。定时器调用的方法是internal
,所以我认为没有任何方法可以设置自己的计时器来更频繁地调用它(忽略反射)。然而,好消息是你真的没有任何理由关心间隔。
Cache.Get()
检查该项目是否未过期,如果已过期,则立即从缓存中删除该项目并返回 null
.因此,您永远不会从缓存中获取过期项目,即使过期项目可能会在缓存中停留长达 20 秒。
关于asp.net - 更改 ASP.NET 缓存项过期的频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/268468/