你认识哪些好的分析器?如何测量C++(MFC)应用程序中的性能?
什么是测量和调整C++ MFC应用程序性能的好方法?
算法真的是分析的必要吗? http://en.wikipedia.org/wiki/Algorithm_analysis
你认识哪些好的分析器?如何测量C++(MFC)应用程序中的性能?
什么是测量和调整C++ MFC应用程序性能的好方法?
算法真的是分析的必要吗? http://en.wikipedia.org/wiki/Algorithm_analysis
如果您留在Windows平台上,我强烈建议AQTime。它配备了大量的分析器,包括静态代码分析,并且可以与最重要的Windows编译器和系统(包括Visual C++,.NET,Delphi,Borland C++,Intel C++甚至gcc)一起工作。它集成到Visual Studio中,但也可以单独使用。我喜欢它。
Glowcode是一个非常好的分析器(当它工作)。它可以附加到正在运行的程序上,只需要符号文件 - 您不需要重新编译。
自从我分析非托管代码以来已经有一段时间了,但是当我做了这些事情之后,我用英特尔的vtune获得了很好的结果。我相信别人会告诉我们,如果这已被超越。
算法分析有可能比您使用探查器找到的任何东西更深刻地改善您的性能,但仅限于某些类别的应用程序。如果你在相当大的数据集上进行操作,算法分析可能会发现在CPU /内存/两者上都更高效的方法,但是如果你的应用主要是用关系数据库进行表单填充来存储的话,它可能不会为你提供太多。
英特尔Thread Checker通过Vtune性能分析器 - 检查这张图片以了解我使用最多的视图,告诉我哪个功能最耗时。
我可以更里面深入和分解这些功能里面他们吃饭了更多的时间等,有根据您所观看的内容(FN +孩子们在总时间=时间)不同的看法,自我时间(仅在函数内部运行的代码中花费的时间等)。
这个工具做的比分析更多,但我没有探索它们。我肯定会推荐它。该工具也可作为可运行30天的全功能试用版下载。如果你有成本限制,我会说这个窗口就是你需要的所有东西来指出你的问题。
PS:我也打了有理有理,但由于某种原因,我没有花费太多它。我怀疑Rational可能比Intel更昂贵。
某些版本的Visual Studio 2005(也许是2008)实际上带有一个相当不错的性能分析器。
如果您拥有它,它应该在工具菜单
下可用,或者您可以搜索打开“性能资源管理器”窗口以开始新的性能会话的方式。
A link to MSDN
如果您仍然在使用Visual C++ 6.0,我建议使用内置的分析器。对于更新的版本,您可以尝试Compuware DevPartner Performance Analysis Community Edition。
对于Windows,请查看Xperf,它随Windows SDK免费提供。它使用采样配置文件,有一些有用的用户界面,&不需要检测。对于追踪性能问题非常有用。您可以回答如下问题:
谁在使用最多的CPU?使用调用堆栈深入到函数名称。 谁在分配最多的内存? 谁在做最多的注册表查询? 磁盘写入?等等。 当你发现瓶颈时,你会感到非常惊讶,因为它们可能不在你预期的地方!
工具(如来自DevPartner的真实时间)可让您查看源代码行的命中数,使您可以快速找到具有错误“大O”复杂度的算法。您仍然需要分析算法以确定如何降低复杂性。
仅供参考,某些版本的Visual Studio只附带非优化编译器。对于我的一个MFC应用程序,如果使用-o3将其与MINGW/MSYS(gcc编译器)一起编译,那么它的运行速度将比使用Visual Studio进行编译的速度快5-10倍。
例如,我有一个openstreetmap xml编译器,它需要大约3分钟(gcc编译版本)来处理一个2.7GB的xml文件。我的视觉工作室编译相同的代码需要大约18分钟的时间来运行。
对于大多数情况,第二个AQTime具有AQTime和Compuwares DevPartner。原因是AQTime将分析具有有效PDB文件的任何可执行文件,而TrueTime需要您进行检测构建。这极大地加速并简化了临时分析。如果这是一个问题,DevPartner也相当昂贵。 DevPartner自带的是BoundsChecker,与AQTimes执行分析器相比,我仍然认为它是捕获泄漏和覆盖的更好工具。 TrueTime可以比AQTime精确得多,但我从未发现这是一个问题。
如果您需要提高本地应用程序的性能,那么性能分析是值得的,IMO是的。我认为你也学到了很多关于你的程序和算法是如何工作的,以及使用某些类型的对象类来存储和遍历数据的成本影响。
我们对开发合作伙伴套件的真实时间非常满意。 – KJAWolf 2008-09-30 13:38:42