当前位置:编程学习 > C#/ASP.NET >>

System.Web.HttpRuntime.Cache缓存失效问题

我们在一个网站中使用了文件依赖缓存,具体添加缓存的代码如下,一般情况下一切正常。
但我们发现在一台机器上资源较紧张时,刚插入缓存的数据,在很短的时间内再去查,就已经不存在了,这里确定所依赖的文件是没有任何变更的,所以不会是文件变更引起缓存失效。
从目前的现象来看,很有可能是由于内存吃紧,导致内存回收,同时将缓存也回收了。
我们插入缓存的代码示例如下:

System.Web.HttpRuntime.Cache.Insert(Key, blRet, new System.Web.Caching.CacheDependency(strPath), System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null);


在此想问一下,这个缓存具体是在哪些情况下会失效? 如何避免这种情况的发生?
现在的关键问题是:当我把服务器上其他一些吃内存的进程关闭后,网站中的缓存依旧在插入后就会失效,这就让我怀疑并不完全是内存吃紧导致回收引起;必需要重启IIS进程后才会正常。

哪位有相关经验的,多指点下。  缓存  .NET --------------------编程问答-------------------- 你的服务器内存有多少G啊,有100来G吗?
--------------------编程问答-------------------- 一般人家作文件缓存服务器内存都很大,几百G以上的 --------------------编程问答--------------------
引用 楼主 TragicGuy 的回复:
我们在一个网站中使用了文件依赖缓存,具体添加缓存的代码如下,一般情况下一切正常。
但我们发现在一台机器上资源较紧张时,刚插入缓存的数据,在很短的时间内再去查,就已经不存在了,这里确定所依赖的文件是没有任何变更的,所以不会是文件变更引起缓存失效。
从目前的现象来看,很有可能是由于内存吃紧,导致内存回收,同时将缓存也回收了。
我们插入缓存的代码示例如下:

System.Web.HttpRuntime.Cache.Insert(Key, blRet, new System.Web.Caching.CacheDependency(strPath), System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.High, null);


在此想问一下,这个缓存具体是在哪些情况下会失效? 如何避免这种情况的发生?
现在的关键问题是:当我把服务器上其他一些吃内存的进程关闭后,网站中的缓存依旧在插入后就会失效,这就让我怀疑并不完全是内存吃紧导致回收引起;必需要重启IIS进程后才会正常。

哪位有相关经验的,多指点下。 


如果你在asp.net中使用(而不是桌面或者windows service等的进程中),那么它会随着asp.net进程自己重启而丢失。实际上不仅缓存全都没了,所有的静态变量值等等的也都没了。

你测试一下,看看是不是asp.net进程重启。 --------------------编程问答-------------------- 谢谢关注,首先,确定IIS是没有重启的,只是他的内存在上升,我们的是小应用,只有几个G的内存,也只是给网站自己用的,不是作为分布式缓存在用[这个也只支持进程内的缓存],确定是内存太小了? 有没有关于这种缓存机制的详细的资料?  --------------------编程问答-------------------- 再补充一下,我们这个只是用于缓存一些常用到的数据,当数据库数据变更时,会解决其依赖的文件变更,以达到能与数据库同步的目的 。 不会用来缓存相关的文件等信息。  --------------------编程问答-------------------- 谁说IIS重启了? --------------------编程问答-------------------- 楼主用高速缓存为了实现什么  --------------------编程问答-------------------- 这个问题很奇怪,后来我们换操作系统后,这个问题消失了。。。  --------------------编程问答-------------------- Cache.Insert("uName", sbHtml, null, DateTime.Now.AddSeconds(35), System.Web.Caching.Cache.NoSlidingExpiration); --------------------编程问答-------------------- 觉得你这样用缓存不是自己想用的缓存.缓存是写在静态类里面,执行一次,只要不关程序就永久留在内存
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,