我的项目不大,用到了缓存,数据量不大1、我设置的缓存时间是五分钟,为什么随着时间的推移,占用的内存一直在增长呢,应该有很多过期了的2、当内存占用达到500M以上时,缓存的读取挺正常,但是缓存过期后回调的方法就不能还执行了,内存占用小的时候是正常的

解决方案 »

  1.   

    不知楼主使用的是哪种缓存机制,是System.Web.Caching.Cache呢还是memcached,Caching.Cache的话,检查一下到期策略是否正确,如果是memcached,虽然会优先使用已超时的记录的空间,但有时候仍然需要使用 LRU机制来分配空间,删除“最近最少使用”的记录。
      

  2.   

    用的是System.Web.Caching.Cache,以前用memcached会使CPU高,
    除了缓存,还有什么因素能让内存一直往上涨呢
      

  3.   

    贴你的缓存代码,如果是
     Response.Cache.SetCacheability(HttpCacheability.Public);
                  Response.Cache.SetMaxAge(new TimeSpan(0, 30, 0));
    你抓取时间 是会变的。
      

  4.   

    也可我的代码有问题,刚检查了一下,
     using (SqlConnection cn = new SqlConnection(SqlHelper.DBCONN))
    {
       cn.Open();
       SqlDataReader dr = SqlHelper.ExecuteReader(cn, "Sys_GetDP", new object[] {PID });
       while (dr.Read())
       {
       }
    }上面的代码没有加
       dr.Close();
       cn.Close();
    会是这个问题吗?
      

  5.   

    不知楼主使用的是哪种缓存机制,是System.Web.Caching.Cache呢还是memcached,Caching.Cache的话,检查一下到期策略是否正确,如果是memcached,虽然会优先使用已超时的记录的空间,但有时候仍然需要使用 LRU机制来分配空间,删除“最近最少使用”的记录。
      

  6.   

    你这不是缓存啊。 仅仅是你没有释放连接池。这样的话只用GC(....)。
    所以你说的问题, 仅仅是你代码的资源问题。
    每次用完, 都要释放dr.Close();
    cn.Close();
    之后再试试。