你知道哪些好的分析器?
测量和调整 C++ MFC 应用程序性能的好方法是什么?
如果您使用 Windows 平台,我强烈推荐AQTime 。它带有大量分析器,包括静态代码分析,并且可以与最重要的 Windows 编译器和系统一起使用,包括 Visual C++、.NET、Delphi、Borland C++、Intel C++ 甚至 gcc。它集成到 Visual Studio 中,但也可以独立使用。我喜欢它。
如果您(仍在)使用 Visual C++ 6.0,我建议使用内置分析器。对于更新的版本,您可以尝试Compuware DevPartner 性能分析社区版。
对于 Windows,请查看随 Windows SDK 免费提供的Xperf 。它使用采样配置文件,具有一些有用的 UI,并且不需要检测。对于跟踪性能问题非常有用。您可以回答以下问题:
谁使用的 CPU 最多?使用调用堆栈深入到函数名称。谁分配的内存最多?谁做的注册表查询最多?磁盘写入?等等。当您发现瓶颈时,您会感到非常惊讶,因为它们可能不是您预期的!
自从我分析非托管代码已经有一段时间了,但是当我这样做时,我在 Intel 的 vtune 上取得了不错的成绩。我相信其他人会告诉我们这是否已被超越。
算法分析有可能比使用分析器发现的任何东西都更深刻地提高您的性能,但仅适用于某些类别的应用程序。如果您对相当大的数据集进行操作,算法分析可能会找到在 CPU/内存/两者方面更有效的方法,但如果您的应用程序主要是使用关系数据库进行存储的表单填充,它可能不会为您提供太多。
Intel Thread Checker via Vtune 性能分析器——查看这张图片,查看我最常使用的视图,它告诉我哪个函数占用了我最多的时间。
我可以进一步深入研究并分解其中的哪些函数会占用更多时间等。根据您正在观看的内容(总时间 = fn + children 中的时间),self time(仅花费在代码中运行的时间)有不同的视图功能等)。
这个工具不仅仅是分析,但我还没有全部探索过。我肯定会推荐它。该工具还可以作为可运行 30 天的全功能试用版下载。如果您有成本限制,我会说这个窗口是您确定问题所需的全部。
ps:我也玩过 Rational Rational,但出于某种原因,我并没有太多兴趣。我怀疑 Rational 也可能比 Intel 更贵。
可以让您查看源代码行命中计数的工具(例如来自 DevPartner 的真实时间)让您可以快速找到具有糟糕“Big O”复杂性的算法。您仍然必须分析算法以确定如何降低复杂性。
在大多数情况下,我第二个 AQTime,同时拥有 AQTime 和 Compuwares DevPartner。原因是 AQTime 将分析任何具有有效 PDB 文件的可执行文件,而 TrueTime 要求您进行检测构建。这大大加快并简化了临时分析。如果这是一个问题,DevPartner 的成本也会更高。DevPartner 的优势在于 BoundsChecker,我仍然认为它是比 AQTimes 执行分析器更好的捕获泄漏和覆盖的工具。TrueTime 可能比 AQTime 更准确,但我从未发现这是一个问题。
如果您需要在本地应用程序上提高性能,那么分析是否值得,IMO 是的。我认为您还学到了很多关于您的程序和算法如何真正工作的知识,以及使用某些类型的对象类来存储和迭代数据的成本影响。
Glowcode是一个非常好的分析器(当它工作时)。它可以附加到正在运行的程序并且只需要符号文件 - 您不需要重新构建。
某些版本的 pf visual studio 2005(可能还有 2008)实际上带有一个相当不错的性能分析器。
如果您有它,它应该在工具菜单下可用,
或者您可以搜索打开“性能资源管理器”窗口以开始新的性能会话的方法。
MSDN 的链接
仅供参考,某些版本的 Visual Studio 仅附带非优化编译器。对于我的一个 MFC 应用程序,如果我使用带有 -o3 的 MINGW/MSYS(gcc 编译器)编译它,那么它的运行速度大约是我使用 Visual Studio 编译的版本的 5-10 倍。
例如,我有一个 openstreetmap xml 编译器,处理一个 2.7GB 的 xml 文件大约需要 3 分钟(gcc 编译版本)。我的 Visual Studio 编译相同代码大约需要 18 分钟才能运行。