相关疑难解决方法(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
查看次数

UtcNow和现在是相同的日期时间吗?他们知道他们有所不同吗?

如果我运行一个片段,如:

bool areTheyTheSame = DateTime.UtcNow == DateTime.Now
Run Code Online (Sandbox Code Playgroud)

我会得到什么?DateTime返回知道它的时区,以便我可以比较吗?

我的具体问题是我正在尝试构建类似缓存的API.如果需要DateTime AbsoluteExpiration,我是否必须强制我的API用户知道是给我一个UTC时间还是基于时区的时间?

[编辑]这个问题与我的问题非常相关:Cache.Add绝对到期 - 是否基于UTC?

[编辑]为了澄清未来的读者,DateTimeKind是不同的.未定义的DateTimeKind通常是一个问题,例如,当您从数据库中取出一个时,就会得到这个问题.在DateTime构造函数中设置DateTimeKind ...

[编辑] JonSkeet写了一篇可爱的博客文章,谴责这种行为并提供解决方案:http://noda-time.blogspot.co.uk/2011/08/what-wrong-with-datetime-anyway.html

c# timezone datetime utc

5
推荐指数
1
解决办法
1612
查看次数

标签 统计

asp.net ×1

c# ×1

caching ×1

datetime ×1

timezone ×1

utc ×1