public static void AddHits()
    {
        // 是否存在
        if (HttpRuntime.Cache[CacheName] == null) // 否
        {
            Add();
            onRemove = new CacheItemRemovedCallback(ItemRemovedFromCache);
            HttpRuntime.Cache.Insert(CacheName, Count, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, onRemove);
        }
        else
        {
            Add();
            HttpRuntime.Cache[CacheName] = Count;
        }
    }
private static void ItemRemovedFromCache(string key, object value, CacheItemRemovedReason reason)
·· AddHits()是点击量增加 Count 属性的点击量 如上但总是不会触发 ItemRemovedFromCache 方法,跪求解贴
(http://www.cnblogs.com/goooto/archive/2008/03/30/1130311.html,本来是想按这上面缓存+点击量但是发现这有
永远调用一个类的同一个实体缓存 才有可能起到作用!!!)

解决方案 »

  1.   

    我用是可以的. 断点设在ItemRemovedFromCache中,可以触发 public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                MyCahe.AddHits("A", 1);
            }
         
        }    public class MyCahe
        {
            public static void AddHits(string CacheName, int Count)
            {
                // 是否存在 
                if (HttpRuntime.Cache[CacheName] == null) // 否 
                {                CacheItemRemovedCallback onRemove = new CacheItemRemovedCallback(ItemRemovedFromCache);
                    HttpRuntime.Cache.Insert(CacheName, Count, null, DateTime.Now.AddSeconds(5), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, onRemove);
                }
                else
                {                HttpRuntime.Cache[CacheName] = Count;
                }
            }
            private static void ItemRemovedFromCache(string key, object value, CacheItemRemovedReason reason)
            {
                int i = 100;
            }
      

  2.   

    缓存未过期前
    HttpRuntime.Cache[CacheName]就不是null了,
    ItemRemovedFromCache肯定执行不了.new CacheItemRemovedCallback(ItemRemovedFromCache); 放置在判断前 执行 
      

  3.   

    确实没看懂你说的是什么,你说的刷新是指什么?
    添加新key还是?
      

  4.   

    你在
      private static void ItemRemovedFromCache(string key, object value, CacheItemRemovedReason reason)
            {
               HttpRuntime.Cache.Remove(key); //这里回这一句后再试.            int i = 0;
                 
            }
      

  5.   

    第一次给缓存赋值后,设定它的超时时间。例如20秒。
    于是这个缓存在20秒后过期,正常执行缓存结束事件,如ItemRemovedFromCache。
    但第二次给缓存赋值后,实体类就会重新加载。于是便不会执行之前LZ的ItemRemovedFromCache。LZ其实的核心问题就是:
    实体类重新加载后,如何继续使它执行ItemRemovedFromCache?按LZ的代码讲解:     onRemove = new CacheItemRemovedCallback(ItemRemovedFromCache); 
        HttpRuntime.Cache.Insert(CacheName, Count, null, DateTime.Now.AddSeconds(20), TimeSpan.Zero, System.Web.Caching.CacheItemPriority.High, onRemove); 第二次给缓存赋值后,缓存便不知道onRemove是什么东西(因为已经重新加载了,根本没有执行onRemove = new CacheItemRemovedCallback(ItemRemovedFromCache); ),那么自然无法执行缓存结束事件。
      

  6.   

    我试过是可以的,如果你不remove就有这个问题.
    引起这个问题是,已经执行过remove事件了,结果cache还在,那刷新时还执行update的代码,
    所以不会再有remove事件了.