Asp.net System.Web.Caching.Cache不';你似乎没有按时恢复精力?

Asp.net System.Web.Caching.Cache不';你似乎没有按时恢复精力?,asp.net,caching,system.web.caching,Asp.net,Caching,System.web.caching,我正在我的网站使用的程序集中使用System.Web.Caching.Cache。 我已经将一些密钥过期(绝对过期)设置为10秒(仅用于调试)。 我还设置了移除密钥时的回调 问题是,我看到缓存在大约20秒而不是10秒后被刷新 我正在为此使用HttpRuntime.Cache 有没有关于为什么会发生这种情况的建议 我想展示一个代码示例,它可以提供更多信息: public void OnUpdate(string key , CacheItemUpdat

我正在我的网站使用的程序集中使用
System.Web.Caching.Cache
。 我已经将一些密钥过期(绝对过期)设置为10秒(仅用于调试)。 我还设置了移除密钥时的回调

问题是,我看到缓存在大约20秒而不是10秒后被刷新

我正在为此使用
HttpRuntime.Cache

有没有关于为什么会发生这种情况的建议

我想展示一个代码示例,它可以提供更多信息:

public  void OnUpdate(string key
                      , CacheItemUpdateReason reason
                      , out object expensiveObject
                      , out CacheDependency dependency
                      , out DateTime absoluteExpiration
                      , out TimeSpan slidingExpiration)
{
    using (StreamWriter sw = new StreamWriter(@"C:\temp\foo.txt",true))
    {
        sw.WriteLine("Updated Cache at " + DateTime.UtcNow); 
    }
    expensiveObject = 11;
    dependency = null;
    absoluteExpiration = DateTime.UtcNow.AddSeconds(3);
    slidingExpiration = Cache.NoSlidingExpiration;
}
protected void Page_Load(object sender, EventArgs e)
{
    log.WriteInfo("Updated Cache", MethodBase.GetCurrentMethod());
    Page.Cache.Insert("foo", (object)11, null, DateTime.UtcNow.AddSeconds(10), Cache.NoSlidingExpiration, new CacheItemUpdateCallback(OnUpdate));
}
在这里,我使用了
Page.Cache
。更新应每3秒进行一次。实际上,每40秒执行一次,如下打印输出所示:

于2011年1月28日凌晨1:38:20更新缓存
2011年1月28日凌晨1:38:40更新缓存
2011年1月28日凌晨1:39:00更新缓存
2011年1月28日凌晨1:39:20更新缓存
2011年1月28日凌晨1:39:40更新缓存
2011年1月28日凌晨1:40:00更新缓存
2011年1月28日凌晨1:40:20更新缓存
2011年1月28日凌晨1:40:40更新缓存
2011年1月28日凌晨1:41:00更新缓存
2011年1月28日凌晨1:41:20更新缓存
2011年1月28日凌晨1:41:40更新缓存
2011年1月28日凌晨1:42:00更新缓存
2011年1月28日凌晨1:42:20更新缓存
2011年1月28日凌晨1:42:40更新缓存


可能是什么问题?

内部缓存过期计时器每20秒触发一次

我反映到
System.Web.Caching.CacheExpires

但后来发现已经是这样了


您可以使用在库中实现的PCache类。很好的一点是,关于这个课程,免费版没有限制。它有许多功能,远远优于System.Web.Caching.Cache类


此外,链接上还有一个示例项目。您可以使用PCache将TimerInterval更改为6秒

你能发布你的缓存吗statement@djeeg:我刚刚在示例代码中添加了问题。你看,上帝保佑你!我的朋友!你为了试验那件事已经下了一整晚的决心。这正是我一直在寻找的答案。奇怪的是,他们没有在文档上写下这一点。例如,当我们确实需要在50秒后更新项目时,我们可以做什么?基本上,你所说的(我已经阅读了你推荐的)是我们必须以20秒的倍数处理缓存?比如:20、40、60等等?