map表遍历性能

最近收到很多对数据库查询压力过大的反馈,由于我的程序只是从数据库读取记录,和进行缓冲;所以考虑通过延长应用程序内部的缓存时间、增大缓存量,使程序从缓存中读取数据,从而解决访问数据库过于频繁的问题,从而降低数据库读取压力。
程序中的缓存数据使用STL中的map表保存,缓存的数据量比较大,单个对象占用50个字节,缓存个数约1百万吧;且由于有定时的遍历检查任务,所以比较担心遍历的性能,于是进行了遍历map表的性能测试。先测试了一下10万次遍历的性能,发现计算机速度快的超出想象,具体耗时如下:
10万次调试版本:329、343;10万次发布版本:15、15;
耗时的时长单位为毫秒(ms),以下均为毫秒。看来对于发布版本的性能确实比调试版本快很多呀,10万次的遍历测试对发布版本测试意义不大,下面测试一下百万循环的耗时。描述一下本机的测试环境,Dell笔记本电脑,CPU是Intel迅驰1.73G、512M内存、WINXP系统(SP2),以下是发布版本对几种遍历个数的测试结果:
100万次:125、125、125、110、109、109;占用内存约130MB
200万次:281、235、250、234、250、235;占用内存约96MB
500万次:65563、64797、53437、63250、69230、70969;占用内存约240MB
当进行500万次map表遍历测试时,计算机的硬盘一直狂转不止,通过任务管理器也可以看到程序,这时使用了大量的虚拟内存,估计这就是性能下降很多的原因吧。
对比上述几种遍历次数的测试,可以得到一些结论,一是一般的计算机(P4)支持百万次的map表遍历没有什么性能影响,估计200万次下的都可以接受;二是如遍历次数过多(500万以上),性能会发生直线的下降,这种情况我们在编程的过程中应当避免;三是物理内存和虚拟内存相比,性能差距确实是非常之大,如果确实需要消耗比较大的内存,那我们就需要对计算机的内存进行扩容了。
联想其他数据存储类型,STL的list、hash_map、vector和MFC的CList、CMap、CArray等容器存储数据时,其遍历性能应该不会比map表差吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值