mik*_*ike 13 c# asp.net caching
我正在尝试使用HttpRuntime.Cache.Insert()来缓存价格值,但只是在清除之前只显示值几个小时.我究竟做错了什么?我想将值保留在缓存中3天.
HttpRuntime.Cache.Insert(CacheName, Price, null, DateTime.Now.AddDays(3), TimeSpan.Zero);
Run Code Online (Sandbox Code Playgroud)
IDi*_*ble 33
您的应用程序池或网站即将关闭.扩展站点上的空闲超时,延长运行站点的池的应用程序池生命周期.提高内存分配和请求限制.
如果您想知道何时以及为何从缓存中删除某些内容,则需要使用插入时的CacheItemRemovedCallback选项记录项目删除...然后您可以使用CacheItemRemovedReason参数记录原因.因此,您可以将原因记录为列出的四个原因之一:
通常,您会发现Expired和Underused是没有明确的事情的原因删除对缓存的调用并且没有依赖项.
在寻找这些有趣的东西时,您可能会发现您的物品没有过期或未充分使用.相反,我怀疑你会发现AppDomain正在卸载.
由于web.config(或bin目录,或.aspx等)文件发生更改,可能会发生这种情况.有关何时发生此更多信息,请参阅本页的" 应用程序重新启动"部分.发生这种情况时,将清除当前挂起的请求,清空缓存,并卸载AppDomain.您可以通过检查AppDomain.IsFinalizingForUnload并在回调期间记录该情况来检测此情况.
AppDomain回收的另一个原因是IIS决定回收AppPool时出于其配置的任何原因.例如,xxx内存已经分配了整个生命周期,AppPool的运行时yyy秒,ttt预定的循环时间或iiii空闲时间(没有请求传入).有关更多详细信息,请查看本文的IIS6或IIS7的本文
Cache对象并不保证它会保留缓存对象,更不用说你建议的全部时间了.
如果您希望更强烈地鼓励它这样做,您可以在将项目插入缓存时设置CacheItemPriority.High或CacheItemPriority.NotRemovable.使用默认的Normal优先级时,运行时具有相当激进的策略,即在内存压力增加时释放对象.
最重要的是,默认情况下,IIS AppPool将每天/每天回收一次,这将清除缓存中的所有内容.
| 归档时间: |
|
| 查看次数: |
21926 次 |
| 最近记录: |