适用于Windows的体面分析器?

窗户是否有任何体面的取样(例如非仪表)型材? 最好在MacOS上类似于鲨鱼,尽pipe我愿意接受我将不得不在Windows上支付这样一个分析器。

我已经试过了VS Team Suite中的剖析器,并没有太深刻的印象,并想知道是否还有其他好的。

[编辑:Erk,我忘了说这是C / C + +,而不是.NET – 抱歉有任何混淆]

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

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

对于Windows,请查看随Windows SDK一起提供的免费Xperf 。 它使用采样的配置文件,有一些有用的用户界面,&不需要仪器。 对于追踪性能问题非常有用。 你可以回答如下问题:

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

谁分配最多的内存?

杰出的内存分配(泄漏)

谁在做最多的注册表查询?

磁盘写入? 等等

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

它没有前面提到的一些其他性能分析器的功能,但它是一个相当可观的采样性能分析器,在大多数情况下都能很好地工作。

AMD的CodeAnalyst 在这里是免费的

我们同时使用VTune和AQTime,我可以同时担保。 哪个最适合你,取决于你的需求。 两者都有免费试用版 – 我建议你给他们一个去。

Windows驱动程序工具包包含一个称为“kernrate”的非仪表用户/内核采样分析器。 分析多进程应用程序,花费大部分时间在内核中的应用程序以及设备驱动程序(当然),似乎很有用。 它也可在KrView(corerate查看器)和Windows server 2003资源工具包工具包中使用。

corerate适用于Windows 2000及更高版本(不像Xperf,需要Vista / server 2008)。 这是基于命令行的,文档有一些有些吓人的选项。 我不确定它是否可以记录调用堆栈或只是程序计数器。 如果使用符号服务器,请确保将最新的dbghelp.dllsymsrv.dll dbghelp.dllsymsrv.dll相同的目录中,以防止使用安装在%SystemRoot%\system32的古老版本的dbghelp.dll %SystemRoot%\system32

大约两年前,我已经尝试过一个相当大的项目。 当时它是一个工具分析工具,并且花费了很长时间来测试我试图描述的DLL,一小时后我最终失去了耐心。

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

Luke Stackwalker看起来很有前景 – 虽然没有我想要的那么出色,但它确实是开源的,它确实做了一些非常接近Dunlavey所说的我们应该做的事情。 (当然,它试图把这一切都付诸于麦克厌倦的通常无用的通话图表,但是以源头作为我们的盟友来解决这个问题不应该太难。

它甚至似乎花费了在内核中等待的时间,据我所知…

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