目前有一个表(几乎每个页面都要访问到),这个表是放菜单的,所以我就像放到缓存里面去我以前的缓存做法是从数据库查询出这个表,将整个表的记录封装到Datatable里面,然后将整个datatable放到缓存
但是这个缓存用的地方太多,比如根据ID取某列的值之后发现服务器CPU太高了,问了些朋友,朋友说因为我缓存放的是整个datatable(里面有500条记录左右)对象
建议我缓存里面放哈希类型,不用整个datatable存进去,但是换成哈希值和,哈希是二维的,我这个表有很多列数据的,好像又没有多维的数组
这个时候怎么办?请CSDN的牛人帮忙给个方案!究竟缓存里面放什么类型的对象,性能会好点?

解决方案 »

  1.   

    服务器CPU太高跟这500条缓存有什么关系?你是用Cache吧,还是觉得你找找其它原因造成的CPU过高,缓存跟CPU关系不大
      

  2.   

    如果你频繁的对数据表做耗时操作,比如遍历,是会导致CPU高,这种时候可以考虑对程序优化。如果你频繁的根据ID来获取记录,可以考虑保存记录到Dictionary中,ID做键,对应的记录做值。记录应该设计成对应的实体类,便于存到键值中。这样以后根据ID获取记录可以避免遍历。
    话说500条记录也不多啦,计算遍历也不算什么,你确定CPU占用高问题是因为这个?要是CPU占用不超过70%也还OK啦,老让CPU闲着干什么,你又不用响应节能减排的号召。
      

  3.   

    Xml我觉得没得必要,序列化到文件存储的好
      

  4.   

    我存哈希和整个datatable,哪个占用量高
      

  5.   

    500条记录把你的内存用完了?需要频繁的虚拟内存交换所以造成的你的CPU利用率高?500条记录用不了多少内存吧,即使一个记录1兆也只有500兆,一般的情况下一个记录1k就很大了,所以这500个记录可能连1兆的内存都没用到,这点内存根本不会给你机器的内存造成负担。
    而缓存不仅不会加重CPU的负担,反而会大幅减轻CPU的负担,除非你这个缓存太大搞的机器的内存不够用了
      

  6.   

    建议我缓存里面放哈希类型,不用整个datatable存进去,但是换成哈希值和,哈希是二维的,我这个表有很多列数据的,好像又没有多维的数组
    这个时候怎么办?
    ==================
    那就用 泛型字典嘛 Dictionary<TKey, TValue>如果还不够,楼主可以自定义一个 二键值对
      

  7.   

    500条?开什么玩笑...你确定CPU负载高跟这个有关系?如果是,你那是什么破服务器啊,得换服务器了...还是好好检查下问题究竟在哪儿吧...