适用于Windows的体面探查器

Decent profiler for Windows?

本文关键字:探查 体面 Windows 适用于      更新时间:2023-10-16

windows是否有合适的采样(例如非仪器化)分析器可用?最好是类似于MacOS上的Shark的东西,尽管我愿意接受我将不得不在windows上为这样一个探查器付费。

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

【编辑:呃,我忘了说这是针对C/C++的,而不是.NET的——很抱歉造成任何混淆】

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

谁使用的CPU最多?使用调用堆栈向下搜索到函数名称。

谁在分配最多的内存?

未分配内存(泄漏)

谁进行的注册表查询最多?

磁盘写入?等等

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

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

"英特尔VTune"很好,而且不进行检测。我们评估了一大堆适用于Windows的评测器,这是处理驱动程序代码的最佳方法(尽管它也处理非托管用户级代码)。一个特别的优势是,它可以读取所有英特尔处理器性能计数器,因此您可以很好地了解代码运行缓慢的原因,它有助于将预取指令放入我们的代码中,并对数据布局进行排序,使其与缓存行以及多核系统中缓存行无效的方式配合使用。

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

AMD的CodeAnalyst是免费此处

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

Windows驱动程序工具包包括一个名为"kernrate"的非检测用户/内核采样探查器。它对于分析多进程应用程序、将大部分时间花在内核中的应用程序以及设备驱动程序(当然)似乎很有用。它也可以在KrView(Kernrate Viewer)和WindowsServer2003资源工具包工具包中找到。

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

大约两年前,我在一个相当大的项目中尝试过英特尔的vtune。当时这是一个检测探查器,我试图对DLL进行检测花了很长时间,一个小时后我最终失去了耐心。

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

Luke Stackwalker似乎很有希望——它没有我想要的那么完美,但它是开源的,它确实做了一些似乎非常接近@Mike Dunlavey一直说我们应该做的事情。)

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

我不确定什么是非检测探查器,但我可以说,对于.NET,我喜欢RedGate的ANTS探查器。版本3在易用性方面胜过MS版本,版本4允许任意时间片,这让MS看起来像个笑话。