24

Windows 是否有任何像样的采样(例如非仪器)分析器可用?最好是类似于 MacOS 上的 Shark 的东西,尽管我愿意接受我将不得不为 Windows 上的这种分析器付费。

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

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

4

9 回答 9

16

对于 Windows,请查看随 Windows SDK 提供的免费Xperf。它使用采样配置文件,具有一些有用的 UI,并且不需要检测。对于跟踪性能问题非常有用。您可以回答以下问题:

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

谁分配的内存最多?

未完成的内存分配(泄漏)

谁做的注册表查询最多?

磁盘写入?等等

于 2008-10-04T10:58:08.170 回答
12

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

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

于 2009-07-06T19:57:44.893 回答
11

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

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

于 2008-10-04T09:38:43.900 回答
6

AMD 的 CodeAnalyst在这里免费

于 2008-12-31T21:56:35.147 回答
4

我们同时使用 VTune 和 AQTime,我可以保证两者。哪个最适合您取决于您​​的需求。两者都有免费试用版 - 我建议您试一试。

于 2008-10-04T22:12:32.663 回答
3

Windows 驱动程序工具包包括一个名为“kernrate”的非仪器用户/内核采样分析器。它似乎对分析多进程应用程序、大部分时间在内核中的应用程序和设备驱动程序(当然)很有用。KrView (Kernrate Viewer)Windows Server 2003 资源工具包工具包中也提供了它。

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

于 2008-10-05T08:42:29.520 回答
2

大约两年前,我在一个相当大的项目中尝试过英特尔的 vtune。当时它是一个检测分析器,我花了很长时间来检测我试图分析的 DLL,以至于一个小时后我最终失去了耐心。

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

于 2008-10-04T11:33:32.780 回答
1

Luke Stackwalker似乎很有希望——它没有我想要的那么完美,但它是开源的,它确实做了一些看起来非常接近@Mike Dunlavey 一直说我们应该做的事情。(当然,它会尝试将其全部归结为 Mike 厌倦的通常无用的调用图,但以源作为我们的盟友来解决这个问题应该不会太难。)

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

于 2010-04-20T17:09:15.093 回答
-3

我不确定什么是非仪器分析器,但我可以说对于 .NET,我喜欢 RedGate 的 ANTS Profiler。第 3 版在易用性方面优于 MS 版,第 4 版允许任意时间片,让 MS 看起来像个笑话。

于 2008-10-04T09:23:57.020 回答