适用于Windows的体面探查器?

时间:2008-10-04 09:20:17

标签: c++ windows performance profiling

Windows是否有适当的采样(例如非仪表)分析器?最好类似于MacOS上的Shark,虽然我愿意接受我将不得不在Windows上支付这样的分析器。

我在VS Team Suite中尝试过探查器并没有给人留下太深刻的印象,并且想知道是否还有其他好的。

[编辑:Erk,我忘了说这是用于C / C ++,而不是.NET - 抱歉有任何困惑]

9 个答案:

答案 0 :(得分:16)

对于Windows,请查看Windows SDK附带的免费Xperf。它使用采样的配置文件,有一些有用的UI,&不需要仪器。对于跟踪性能问题非常有用。您可以回答以下问题:

谁使用的CPU最多?使用调用堆栈深入查看函数名称。

谁分配的内存最多?

杰出的内存分配(泄漏)

谁在进行大多数注册表查询?

磁盘写入?等。

答案 1 :(得分:12)

我知道在问这个问题几个月之后我正在添加我的答案,但我想我会指出一个体面的,开源的探查器:Very Sleepy

它没有之前提到的其他一些分析器的功能计数,但它是一个非常值得尊敬的采样分析器,在大多数情况下都能很好地工作。

答案 2 :(得分:11)

Intel VTune很好并且没有工具。我们为Windows评估了大量的分析器,这对于使用驱动程序代码是最好的(尽管它也有非托管用户级代码)。一个特别的优势是它可以读取所有英特尔处理器性能计数器,因此您可以很好地理解代码运行缓慢的原因,并且将预取指令放入代码并整理数据布局以便与缓存行,以及缓存行在多核系统中失效的方式。

这是商业性的,我不得不说它不是世界上最简单的用户界面。

答案 3 :(得分:6)

AMD的CodeAnalyst 免费 here

答案 4 :(得分:4)

我们同时使用VTune和AQTime,我可以保证两者兼顾。哪种方式最适合您,取决于您的需求。两者都有免费试用版 - 我建议你试试看。

答案 5 :(得分:3)

Windows Driver Kit包括一个名为"kernrate"的非仪器用户/内核采样分析器。这对于分析多进程应用程序,将大部分时间花在内核中的应用程序以及设备驱动程序(当然)来说似乎很有用。它也可以在KrView (Kernrate Viewer)Windows Server 2003 Resource Kit Tools包中找到。

Kernrate适用于Windows 2000及更高版本(与Xperf不同,后者需要Vista / Server 2008)。它是基于命令行的,文档有一些令人生畏的选项列表。我不确定它是否可以记录调用堆栈或只是程序计数器。如果您使用符号服务器,请务必将最新的dbghelp.dllsymsrv.dll放在与kernrate.exe相同的目录中,以防止它使用古代版{{1}安装在dbghelp.dll

答案 6 :(得分:2)

两年前,我已经尝试过英特尔的一个相当大的项目。那时它是一个仪器分析器,我花了很长时间来检测我试图描述的DLL,我最终在一小时后失去了耐心。

我有一个非常成功的工具,我强烈推荐的是AQTime。它不仅提供了出色的性能分析资源,而且还具有非常好的内存分析功能,这对我追踪内存泄漏非常有帮助。

答案 7 :(得分:1)

Luke Stackwalker似乎很有希望 - 它不像我想的那样优雅,但它是开源的,它确实做的事情看起来非常接近@Mike Dunlavey一直说我们应该做的事情。 (当然,它然后尝试将它全部放到Mike非常厌倦的通常无用的调用图中,但是用源代码作为我们的盟友来解决这个问题应该不会太难。)

据我所知,它甚至可以计算在内核中等待的时间......

答案 8 :(得分:-3)

我不确定什么是非仪器分析器,但我可以说.NET我喜欢RedGate的ANTS Profiler。版本3胜过MS版本以便于使用,版本4允许任意时间片,使MS看起来像个笑话。