Windows有没有可用的体面的采样(例如非工具化)分析器? 最好类似于MacOS上的Shark,尽管我愿意接受在Windows上支付此类分析器的费用。
我已尝试过VS Team Suite中的分析器,但并不是特别满意,并且想知道是否有其他好的分析器。
[编辑:糟糕,我忘了说这是针对C / C ++而不是.NET--对于任何混淆感到抱歉]
Windows有没有可用的体面的采样(例如非工具化)分析器? 最好类似于MacOS上的Shark,尽管我愿意接受在Windows上支付此类分析器的费用。
我已尝试过VS Team Suite中的分析器,但并不是特别满意,并且想知道是否有其他好的分析器。
[编辑:糟糕,我忘了说这是针对C / C ++而不是.NET--对于任何混淆感到抱歉]
对于Windows操作系统,可以使用免费的Xperf工具,该工具随Windows SDK一起提供。它使用采样分析技术,具有一些有用的用户界面,并且不需要仪器设备。非常适合于解决性能问题。您可以回答以下问题:
谁正在使用最多的CPU?使用调用堆栈下钻到函数名称。
谁分配了最多的内存?
未解除的内存分配(泄漏)
谁在执行最多的注册表查询?
磁盘写入?等等。
虽然这个问题被问了几个月,但我想指出一个不错的开源分析器:Very Sleepy。
它没有之前提到的一些分析器所拥有的功能数目,但它是一个相当可敬的采样分析器,在大多数情况下都能很好地工作。
它是商业软件,我必须说它的用户界面并不是最方便的。
我们同时使用VTune和AQTime,我可以保证它们的可靠性。哪个更适合您取决于您的需求。两者都有免费试用版本-我建议您尝试一下。
Windows Driver Kit 包含一个非仪器化的用户/内核采样分析工具,名为"kernrate"。它对于分析多进程应用程序、大部分时间在内核中运行的应用程序和设备驱动程序非常有用(当然)。它还可在 KrView(Kernrate Viewer) 和 Windows Server 2003 资源工具包 中使用。
Kernrate适用于Windows 2000及更高版本(与需要Vista / Server 2008的Xperf不同)。它基于命令行,文档中列出了一些有点吓人的选项。我不确定它是否可以记录调用堆栈或仅记录程序计数器。如果您使用符号服务器,请确保将最新的dbghelp.dll
和symsrv.dll
放在与kernrate.exe
相同的目录中,以防止其使用安装在%SystemRoot%\system32
中的古老版本的dbghelp.dll
。
两年前我曾尝试使用英特尔的VTune来处理一个相当大的项目。当时它是一款插装分析工具,但在为我要分析的DLL进行插装时花费了太长时间,最终我在一小时后失去了耐心。
我推荐的一个非常成功的工具是AQTime。它不仅提供了出色的性能分析资源,而且还提供了非常好的内存分析功能,这对我追踪内存泄漏问题非常有帮助。
Luke Stackwalker 看起来很有前途——它不像我想要的那样精细,但它是开源的,而且它确实做了一些似乎非常接近 @Mike Dunlavey 建议我们做的事情。(当然,然后它试图将所有内容压缩到通常不太有帮助的调用图中,这让 Mike 很疲倦,但凭借源代码作为我们的盟友,修复这个问题也不应该太难。)
据我所知,它甚至能计算在内核中等待的时间...
我不确定什么是非插装分析器,但对于.NET,我喜欢RedGate的ANTS Profiler。第3版相比微软版本更易于使用,而第4版允许任意时间片段,使得微软看起来像个笑话。