我有个网站里面有些数据需要长时间缓存在内存里。
最好就是除非网站的DLL文件或者WEB.CONFIG被修改强制了网站重启以外,其他情况缓存都能永久存在。
我发现一段时间内没人访问,缓存会被回收掉。可能是IIS的自动回收应用程序池,或者ASP.NET本身的回收?我试过很多方式,比如静态类里面的静态变量,在Application_End事件里强制自己访问自己。
但是都没办法阻止我的缓存被回收。请问有什么好的解决办法么。注意,不能修改IIS设置。因为没有这个权限。

解决方案 »

  1.   

    http://www.techmango.com/blog/article/DotNet/ASP_dot_NET_Cache_Management.htm
      

  2.   

    可以使用其他缓存工具,如memcached,将缓存保存在独立的进程里面
      

  3.   

    永久存在的缓存是不存在的.
    缓存本身就是被GC所控制的,即使你设置了永久不过期,系统在资源紧缺的时候,或者闲置过久,仍旧会按照优先级被回收掉.楼主的设计是有问题的,有什么东西是必须以缓存形式永久存在的?(除非网站的DLL文件或者WEB.CONFIG被修改强制了网站重启以外).缓存是可以重复写入的,在过期失效之后重新读取就可以了.不必要拘泥于只能读一次就永久存在了.除非你用非托管代码去申请内存放置你需要的东西,然后仅在Application_End的时候才释放,否则使用托管资源都是需要受GC控制.
      

  4.   

    本帖最后由 net_lover 于 2010-10-13 20:14:41 编辑
      

  5.   

    Cache是有时间限制的。超过了服务器设置的过期时间,就会被服务器回收
    定义过期策略来决定缓存中的内容,如已经缓存的时间或者收到其他资源的通知
      

  6.   

    利用缓存来实现定时任务 http://www.codeproject.com/KB/aspnet/ASPNETService.aspx