我现在出现这么个情况,有一张表,实时性要求并不高,但访问量超大.我就把它的datatable放在cache里,每次用户访问就从cache里拿出来这张表进行筛选,然后返回给用户,然后cache15分钟左右更新一次.
测试没问题.一放到线上,问题来了.
一会web服务器的内存就满了(4G)内存我查了一下,问题可能就是出在这里
DataTable dt = (DataTable)Cache[boardCacheName];
这个dt是根据cache生成的,用户量大的话,每个用户都去生成这么个dt,那占用内存是可想而知的.
不知道这种情况有人遇到过么,怎样解决比较好?

解决方案 »

  1.   

    ·双线主机 100M/35元/年,免费送数据库(自选MY/MSSQL) 
    ·详情请访问:http://www.515dns.com 
      

  2.   

    我查了一下,问题可能就是出在这里 
    DataTable dt = (DataTable)Cache[boardCacheName]; 
    这个dt是根据cache生成的,用户量大的话,每个用户都去生成这么个dt,那占用内存是可想而知的. 应该不是的,你那个数据表能有多大? 几万条数据在内存里也没多大的,象文章这种除外。dt 是引用,无论有多少个用户,在内存里只有一个实体你看看是不是你是不是把这个dt拿出来后作过其它什么处理了没?
      

  3.   

    DataTable dt = (DataTable)Cache[boardCacheName]; 
    跟这句没关系,是公有的全局,session才是私有的,人多内存就大多人还是一个dt的内存量
      

  4.   

    为什么每个用户都要生成一个dt呢,可不可以公用一个dt呢?
      

  5.   

    Cache只在服务器上存一份吧,你那个转成dt是放到用户内存中的,和复制多少份没有关系你是不是在操作缓存的时候没有把以前的清掉啊,直接在上面累加了,这样每过15分钟,就会增长一倍,纯属猜测