如何衡量C ++(MFC)应用程序中的性能?
我们知道哪些优秀的分析人员?
有什么好的方法可以测量和调整C ++ MFC应用程序的性能?
算法分析真的必要吗? http://en.wikipedia.org/wiki/Algorithm_analysis
解决方案
Glowcode是一个非常好的分析器(当它起作用时)。它可以添加到正在运行的程序,并且只需要不需要重建的符号文件。
自从我分析了非托管代码以来已经有一段时间了,但是当我这样做时,我在Intel的vtune上取得了不错的成绩。我敢肯定,有人会告诉我们这是否已被超越。
与分析器相比,算法分析有可能更深刻地改善性能,但仅适用于某些应用程序类别。如果我们对相当大的数据集进行操作,则算法分析可能会找到提高CPU /内存/两者效率的方法,但是如果应用程序主要是用关系数据库进行填充,则可能无法为我们提供很多服务。
通过Vtune性能分析器进行Intel Thread Checker检查这张图,可以查看我使用最多的视图,该视图告诉我哪个功能占用了我的大部分时间。
我可以进一步深入了解内部并分解其中的哪些功能会花费更多时间,等等。根据我们所观看的内容(总时间= fn内的时间+子代),自用时间(仅用于在内部代码运行所花费的时间)有不同的观点。功能等)。
这个工具除了分析外,还可以做很多其他的事情,但我还没有对其进行探讨。我肯定会推荐它。该工具还可以作为功能齐全的试用版下载,可以运行30天。如果我们有成本限制,我想说的是确定该问题所需要的全部窗口。
可在此处下载试用版https://registrationcenter.intel.com/RegCenter/AutoGen.aspx?ProductID=907&AccountID=&ProgramID=&RequestDt=&rm=EVAL&lang=
ps:我也玩过Rational Rational,但是由于某种原因,我并没有采取太多的措施。我怀疑Rational可能也比Intel贵。
Visual Studio 2005(也许还有2008)的某些版本实际上带有一个相当不错的性能分析器。
如果有的话,它应该在工具菜单下可用
或者,我们可以搜索打开"性能浏览器"窗口以开始新的性能会话的方法。
到MSDN的链接
如果我们使用Windows平台,我强烈建议AQTime。它带有大量的探查器,包括静态代码分析,并且可与最重要的Windows编译器和系统一起使用,包括Visual C ++ 、. NET,Delphi,Borland C ++,Intel C ++甚至gcc。它已集成到Visual Studio中,但也可以独立使用。我喜欢它。
如果我们仍在使用Visual C ++ 6.0,建议我们使用内置的探查器。有关最新版本,我们可以尝试Compuware DevPartner Performance Analysis社区版。
对于Windows,请查看Windows SDK附带的Xperf。它使用采样的配置文件,具有一些有用的UI,并且不需要检测。对于跟踪性能问题非常有用。我们可以回答以下问题:
谁使用的CPU最多?使用调用堆栈向下钻取到函数名称。
谁在分配最多的内存?
谁在执行最多的注册表查询?
磁盘写?等等。
当我们发现瓶颈时,我们会感到非常惊讶,因为它们可能不在我们预期的位置!
通过工具(例如来自DevPartner的实时时间),我们可以查看源代码行的命中数,从而可以快速查找复杂性不佳的" Big O"算法。我们仍然必须分析算法以确定如何降低复杂度。
仅供参考,某些版本的Visual Studio仅随附未优化的编译器。对于我的MFC应用程序之一,如果我使用带有-o3的MINGW / MSYS(gcc编译器)进行编译,则它的运行速度大约是使用Visual Studio发行版的5-10倍。
例如,我有一个openstreetmap xml编译器,处理一个2.7GB的xml文件大约需要3分钟(gcc编译版本)。我的Visual Studio编译相同的代码大约需要18分钟才能运行。
在大多数情况下,我第二次使用AQTime,同时拥有AQTime和Compuwares DevPartner。原因是AQTime将分析具有有效PDB文件的任何可执行文件,而TrueTime需要我们进行检测。这样可以大大加快并简化即席分析。如果这是一个问题,DevPartner也要贵很多。 DevPartner独树一帜的地方是BoundsChecker,与AQTimes执行事件探查器相比,我仍然认为它是捕获泄漏和覆盖的更好工具。 TrueTime可以比AQTime精确得多,但是我从来没有发现这是一个问题。
如果我们需要在本地应用程序上提高性能,则进行配置很有用,IMO是。我认为我们还学到了很多有关程序和算法如何真正工作的知识,以及使用某些类型的对象类来存储和遍历数据的成本问题。