问题描述
目前有一个表(几乎每个页面都要访问到),这个表是放菜单的,所以我就像放到缓存里面去我以前的缓存做法是从数据库查询出这个表,将整个表的记录封装到Datatable里面,然后将整个datatable放到缓存但是这个缓存用的地方太多,比如根据ID取某列的值之后发现服务器CPU太高了,问了些朋友,朋友说因为我缓存放的是整个datatable(里面有500条记录左右)对象建议我缓存里面放哈希类型,不用整个datatable存进去,但是换成哈希值和,哈希是二维的,我这个表有很多列数据的,好像又没有多维的数组这个时候怎么办?请CSDN的牛人帮忙给个方案!究竟缓存里面放什么类型的对象,性能会好点?
解决方案
解决方案二:
使用全局变量存一份这个就足够了;然后每个用到的地方都访问这个全局变量
解决方案三:
推荐不用缓存,用XML存储的路过
解决方案四:
服务器CPU太高跟这500条缓存有什么关系?你是用Cache吧,还是觉得你找找其它原因造成的CPU过高,缓存跟CPU关系不大
解决方案五:
如果你频繁的对数据表做耗时操作,比如遍历,是会导致CPU高,这种时候可以考虑对程序优化。如果你频繁的根据ID来获取记录,可以考虑保存记录到Dictionary中,ID做键,对应的记录做值。记录应该设计成对应的实体类,便于存到键值中。这样以后根据ID获取记录可以避免遍历。话说500条记录也不多啦,计算遍历也不算什么,你确定CPU占用高问题是因为这个?要是CPU占用不超过70%也还OK啦,老让CPU闲着干什么,你又不用响应节能减排的号召。
解决方案六:
缓存热数据
解决方案七:
从上面的描述来说,是电脑太烂了,可以考虑换台电脑
解决方案八:
引用2楼woairuijuan9的回复:
推荐不用缓存,用XML存储的路过
Xml我觉得没得必要,序列化到文件存储的好
解决方案九:
我存哈希和整个datatable,哪个占用量高
解决方案十:
引用8楼pp8403的回复:
我存哈希和整个datatable,哪个占用量高
哈希表是便于查找的!不适合频繁插入,你放入缓存的目的是什么?
解决方案十一:
500条记录把你的内存用完了?需要频繁的虚拟内存交换所以造成的你的CPU利用率高?500条记录用不了多少内存吧,即使一个记录1兆也只有500兆,一般的情况下一个记录1k就很大了,所以这500个记录可能连1兆的内存都没用到,这点内存根本不会给你机器的内存造成负担。而缓存不仅不会加重CPU的负担,反而会大幅减轻CPU的负担,除非你这个缓存太大搞的机器的内存不够用了
解决方案十二:
建议我缓存里面放哈希类型,不用整个datatable存进去,但是换成哈希值和,哈希是二维的,我这个表有很多列数据的,好像又没有多维的数组这个时候怎么办?==================那就用泛型字典嘛Dictionary<TKey,TValue>如果还不够,楼主可以自定义一个二键值对
解决方案十三:
500条?开什么玩笑...你确定CPU负载高跟这个有关系?如果是,你那是什么破服务器啊,得换服务器了...还是好好检查下问题究竟在哪儿吧...
解决方案十四:
引用10楼charles_y的回复:
500条记录把你的内存用完了?需要频繁的虚拟内存交换所以造成的你的CPU利用率高?500条记录用不了多少内存吧,即使一个记录1兆也只有500兆,一般的情况下一个记录1k就很大了,所以这500个记录可能连1兆的内存都没用到,这点内存根本不会给你机器的内存造成负担。而缓存不仅不会加重CPU的负担,反而会大幅减轻CPU的负担,除非你这个缓存太大搞的机器的内存不够用了
具体怎么来?