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

【求助】HttpRuntime.Cache瞬间失效,Application_Start频繁调用的问题

最近做修改一个项目的时候,用Cache写了个类似Session的功能,在VS中调试没有问题。结果传到服务器IIS站点的文件夹下后,发现Cache里面记录的数据,刷新几次页面就丢失了(Cache[key]为Null),在VS中刷新的时候不会有这样的问题。
于是简单地记录了一下日志,分析了一下情况。
Cache调用Insert进行插入时设置的绝对过期时间是4小时后,权限设为NotRemovable,并且传了个CacheItemRemovedCallback委托作为移除Cache的回调函数。
但是刷新页面导致丢失数据的情况依然如此,而且丢失Cache的时候没有触发回调函数中记录日志的操作。
有一点不知道有没有意义:刷新一个简单的ashx的时候丢失Cache的概率比刷新复杂的首页时丢失的概率要小,不知道和内存有没有关
于是,怀疑是不是应用程序池重启导致的Cache丢失。
在Global.asax的Application_Start和Application_End中也简单记录下日志,结果发现Application_Start的调用比较频繁。
同时,Windows日志中有很多“为应用程序池***提供服务并且进程 ID 为***的工作进程请求了一个回收,因为该工作进程已达到其允许的处理时间限制。”的记录。
在IIS的应用程序池设置里看了半天,过期时间应该是300分钟,内存限制都是0,不知道哪里导致程序池回收的。
(后来还试过Cache改成HttpContext.Current.Application,依然是丢失数据。)
改了半天了没有头绪,因为这个缓存需要经常使用,不想做成文件缓存之类的。

求解这是什么情况啊~~~~各位拜托了~~~~
缓存 IIS 应用程序池 Application_Start Cache丢失 --------------------编程问答-------------------- 求助啊!
真心搞不懂什么情况啊~ --------------------编程问答-------------------- 没有人知道什么回事吗?求助啊!~ --------------------编程问答-------------------- HttpRunTime 是缓存在内存中的,导致数据丢失有这么几种可能
1.程序中自己把cache[key] 更新了
2.cache 中缓存的是class 引用类型
例如: cache.set("key",new User(){Name="A"},new TimeSpan(4,0,0))
var user=cache["key"]
 user.name="B"
var user1=cache["key"]   这时候user1.Name="B"
3.应用程序重启,应该会回收吧? 为什么会多次调用app_start? 理论上只有一次吧


--------------------编程问答-------------------- 检查你的aspx中有没有什么“创建文件夹、删除文件夹、修改bin文件夹里的文件”等操作。

记住,如果要创建或者删除文件,以及文件夹,应该是在asp.net应用的app_data文件夹下(包括子文件夹),而不能随便找个地方就创建修改文件。

你的所谓“文件缓存之类”的说法很可能就有这个问题。 --------------------编程问答-------------------- 再次强调一下(其实强调多少次都不过分),如果你要改变文件和文件夹,应该是对 app_data 下进行操作。

有些 asp.net 程序员很可能干了好几年asp.net页面“编程”连这个原则都不知道。 --------------------编程问答-------------------- 网站中增删文件夹会导致Session丢失的……
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,