Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41448
  • 博文数量: 6
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-05 14:17
文章分类

全部博文(6)

文章存档

2013年(5)

2012年(1)

我的朋友

分类: C/C++

2013-02-03 18:19:35


    性能分析的目的是为了找出“热点”,进而消除热点提高整体效率。只有找到那些最常被执行的20%代码,才能做到有的放矢。本文结合自己的使用经验介绍几个分析工具,并浅谈自己对程序优化的看法。

Opcontrol系列工具在Linux下普遍存在,支持基于时间和计时器两种方式的分析,进一步介绍可参考:http://www.ibm.com/developerworks/cn/linux/l-pow-oprofile/。但是在虚拟机环境中,默认事件都不被支持,只能使用计时器方式,设置方式如下:

opcontrol --deinit

rm -f /root/.oprofile/daemonrc

modprobe oprofile timer=1 

另外,Opcontrol还是一个全局的性能分析工具,所以在虚拟机下分析结果不准确(根据我最近使用经验得来的,有可能是我使用方式的问题)。

    gperftools包括高性能的内存分配器实现--TCMalloc,堆分析,堆检测,CPU分析工具,具体介绍见:。TCMalloc可以在多线程环境下高效管理内存,还可以归还空闲的内存归还给操作系统(通过调用madvise);对于需要大量动态申请内存且长期运行的服务,可以提高其效率和稳定性。用堆检测工具可以检测内存泄露,CPU分析工具可以分析性能热点,具体介绍可参考:http://www.ibm.com/developerworks/cn/linux/l-cn-googleperf/index.html

    VS2010集成开发环境(高级版及以上)包括了性能分析工具,可以进行如下几种分析:采样,检测,.NET内存分配,并发,介绍见:http://www.cnblogs.com/smark/archive/2011/10/12/2208039.html

    最后来总结下,如果是在Linux下,物理机推荐使用Opcontrol,虚拟机推荐使用gperftools(可以顺带检测内存泄露和堆分析);vs2010性能分析工具很强大,也比较方便,并且有独到之处--并发分析。性能分析工具有误差,需要多做几次取平均结果;特别注意代码中的sleep语句,位置是否合适,sleep长短是否合适。

    很多人可能都知道过早优化是“万恶之源“,但是很难准确的判断是不是在过早优化。对于可以预见的性能热点,在设计时采用高效的算法或者牺牲一些可读性、增加点复杂度来提高效率,可能无可厚非;对于拿不准的性能热点,为了优化而提高复杂度,那就得不偿失了。程序集成测试后,做性能分析是十分有必要的,即使你没时间去针对热点进一步优化,可以使得你掌握程序的整体资源消耗情况,可以培养你的分析功底以便更准确的判断是不是在过早优化。

阅读(2825) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~