相关疑难解决方法(0)

Asp.Net何时删除过期的缓存项?

当您将项目添加到System.Web.Caching.Cache具有绝对到期日期时,如下例所示,Asp.Net如何表现?可以:

  1. 只需将项目标记为已过期,然后执行CacheItemRemovedCallback下一次访问尝试?

  2. 从缓存中删除该项并CacheItemRemovedCallback立即执行?

    HttpRuntime.Cache.Insert(key,
                             new object(),
                             null, 
                             DateTime.Now.AddSeconds(seconds), 
                             Cache.NoSlidingExpiration,
                             CacheItemPriority.NotRemovable, 
                             OnCacheRemove);
    
    Run Code Online (Sandbox Code Playgroud)

MSDN似乎表明它立即发生.例如,"ASP.NET缓存概述"的"过期"部分说"ASP.NET在过期时会自动从缓存中删除项目".类似地,主题"如何:从缓存中删除项时通知应用程序"主题中的示例说"如果在调用GetReport[示例中的方法] 之间超过15秒,ASP.NET将从中删除报告缓存".

尽管如此,这些都不是明确的.他们没有说"回调是立即执行的",我可以设想他们的作者可能认为上面的选项1算作"删除"一个项目.所以我做了一个快速而肮脏的测试,而且,它似乎立即执行 - 即使没有人访问我的网站,我也会定期进行第六十二次回调.

尽管如此,我的测试很快而且很脏,并且在我的回答评论中是否有办法在.Net Web应用程序中每天运行一个进程而无需编写Windows服务或SQL服务器作业,有人建议使用Asp.Net实际上是推迟删除和执行回调,直到某些东西再次尝试访问缓存.

任何人都可以权威地解决这个问题,还是仅仅考虑实施细节?

asp.net caching

20
推荐指数
2
解决办法
8597
查看次数

System.Web.Caching.Cache似乎没有按时刷新自己?

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));
}
Run Code Online (Sandbox Code Playgroud)

在这里,我用过Page.Cache …

asp.net caching system.web.caching

2
推荐指数
1
解决办法
2118
查看次数

标签 统计

asp.net ×2

caching ×2

system.web.caching ×1