Cache的级别中, NotRemovable这一项,微软解释是:在服务器释放系统内存时,具有该优先级级别的缓存项将不会被自动从缓存删除。
但我写几行简单代码,测试的结果,每次手工回收应用程序池一下或者iis重启后,这种级别的cache一样被回收掉了,似乎微软的解释和测试结果不一样,所以想问问,哪位达人给解释一下?

解决方案 »

  1.   

    并不矛盾啊,是当内存不够,需要清理内存的时候,不会被自动删除,这属于垃圾回收器级别的。
    当IIS重启或者应用池变化或者服务器重启,自然会被回收的。这属于系统级别的。
    系统级别比GC的级别高。
      

  2.   

    System.GC.Collect();
    GC不行的,需要一个更狠的办法,因为NotRemovable的Cache向GC注册了不受GC控制了,想让垃圾回收器回收就需要重新注册让GC必要的时候回收。
      

  3.   

    没有一样东西能逃过IIS回收的,我用asp.net 另外开一个线程定时执行任务,20分钟准时被IIS关闭。超级郁闷。
      

  4.   

    接下来的疑问,
    CACHE占用内存的有最大限制吗?就是NotRemovable的Cache太多了,占用了太多内存,是不是就会引起gc的频繁回收
      

  5.   

    还有一个问题就是多个应用程序或者站点之间的cache共享和同步问题,我看的最简单的方案就是方案就是使用XML文件来存放缓存的键值,做文件依赖缓存这个我理解的意思,简单的说,就是每个cache键值都生成一个xml文件,然后更新cache时,把这个xml文件里的内容随便更新一下,整个依赖这个xml的缓存都相应更新了但这样会有很多很多以键值命名的xml文件,请问有什么更好点的方法吗?比如文件依赖缓存,依赖于xml文件中的某一个键值,而不是依赖整个xml文件,这样就不会有很多xml文件出现了这样可行吗?或者是否有更好的方法(Memcached讨论除外,暂不打算使用)?