asp.net - 更改 ASP.NET 缓存项过期的频率?

标签 asp.net caching

我注意到 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);
_tsPerBucketreadonly ,所以不能有任何配置设置可以在以后修改它。

然后在 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/

相关文章:

python-memcache 不加载/存储任何内容

java - 存储经常使用的(不可更改的)List、Map 的最佳方式是什么?

c# - 锁定/卡住 ListView 中的表格

asp.net - 在代码隐藏中创建下拉列表时,不会触发 SelectedIndexChanged 事件

javascript - 禁用和启用表格中复选框单击上的文本框

caching - 在 Intersystems Caché 中使用 ENUM 的最佳实践是什么?

php - 在 php 中缓存动态 css 文件

android - 无法从缓存 okHttp 和改造中加载数据

asp.net - 网站可以有哪些测试点?

c# - ASP.NET Identity 在每次请求时重新生成 Identity