profiler 的介绍

来源:互联网 发布:淘宝模特图片拍摄真相 编辑:程序博客网 时间:2024/06/07 05:58

因为之前没接触过项目也就对项目优化无从谈起,就原文摘录一下侯老师的原话吧:

结果是用经验猜测程序那 20%的部分只会导致你心痛。正确的方法是用 profiler 程序
识别出令人讨厌的程序的 20%部分。不是所有的工作都让 profiler 去做。你想让它去直接
地测量你感兴趣的资源。例如如果程序太缓慢,你想让 profiler 告诉你程序的各个部分都
耗费了多少时间。然后你关注那些局部效率能够被极大提高的地方,这也将会很大地提高整
体的效率。

profiler 告诉你每条语句执行了多少次或各函数被调用了多少次,这是一个作用有限
的工具。从提高性能的观点来看,你不用关心一条语句或一个函数被调用了多少次。毕竟很
少遇到用户或程序库的调用者抱怨执行了太多的语句或调用了太多的函数。如果软件足够
快,没有人关心有多少语句被执行,如果程序运行过慢,不会有人关心语句有多么的少。他
们所关心的是他们厌恶等待,如果你的程序让他们等待,他们也会厌恶你。

不过,知道语句执行或函数调用的频繁程度,有时能帮助你洞察软件内部的行为。例如如果
你建立了 100 个某种类型的对象,会发现你调用该类的构造函数有上千次,这个信息无疑是
有价值的。而且语句和函数的调用次数能间接地帮助你理解不能直接测量的软件行为。例如,
如果你不能直接测量动态内存的使用,那么知道内存分配函数和内存释函数的调用频率也是
有帮助的。(也就是,operators new, new[], delete, and delete[]—参见条款 M8)
当然即使最好的 profiler 也是受其处理的数据所影响。如果用缺乏代表性的数据
profile 你的程序,你就不能抱怨 profiler 导致你优化程序的那 80%的部分,从而不曾对
程序通常的性能有什么影响。记住 profiler 仅能够告诉你在某一次运行(或某几次运行)
时一个程序运行情况,所以如果你用不具有代表性的输入数据 profile 一个程序,那你所进
行的 profile 也没有代表型。相反这样做很可能导致你去优化不常用的软件行为,而在软件
的常用领域,则对软件整体的效率起相反作用(即效率下降)。

防止这种不正确的结果,最好的方法是用尽可能多的数据 profile 你的软件。此外,你
必须确保每组数据在客户(或至少是最重要的客户)如何使用软件的方面能有代表性。通常
获取有代表性的数据是很容易的,因为许多客户都愿意让你用他们的数据进行 profile。毕
竟你是为了他们需求而优化软件。

在此贴一下其他博主的文章链接:

性能优化之C++ Profiler http://blog.csdn.net/zmyer/article/details/20394511

使用Google CPU Profiler对C/C++多线程程序做性能剖析http://blog.csdn.net/lostaway/article/details/46489861

用事实说话,C++ Profiler(Visual Studio 2008)http://www.cppblog.com/mymsdn/archive/2010/04/01/111307.html