在 Visual Studio 性能探查器、Windows Performance Toolkit 和 PerfView 之间进行选择

本指南对Microsoft的主要常规用途性能分析技术进行了一般比较:Visual Studio 性能探查器、Windows Performance Toolkit 和 PerfView。

这些工具可帮助你诊断并了解应用程序在 Windows 上的性能特征。 本指南的目的是概述何时相互使用、突出显示其优势以及简要概述它们所包含的功能。

概述

Visual Studio 性能探查器由 Visual Studio 团队创建,用于快速了解现有 Visual Studio 项目系统中进行开发的应用程序的性能特征。 其优势是与活动开发项目紧密集成、简化了最常见性能方案的分析以及可快速轻松地仅收集单个应用程序。

Windows Performance Toolkit 由 Windows 团队创建,用于立刻了解整个电脑的系统范围特征。 虽然它是从分析硬件和驱动程序的需要发展起来的,但它在了解软件问题方面也非常有效。 其优势是立刻从整个计算机收集大量信息,因此这些工具非常适用于多进程问题、处理硬件或驱动程序方面的问题以及复杂方案。

PerfView 由 .NET 团队创建,用于了解 .NET 应用程序的性能。 与 Windows Performance Toolkit 一样,它可以同时从整个计算机收集大量信息。 它通过显示有关 .NET 运行时服务(例如垃圾回收、实时编译和托管线程池)的非常详细的信息来区分它。 PerfView 可用于托管、本机和混合模式应用程序。

这些工具之间存在重叠。 通常,可以在一个工具中开始探索问题,并切换到另一个用于相同方案的不同视图。 其他时候,其中一个工具比其他工具更有效。

安装

Visual Studio 性能探查器是 Visual Studio 本身的组件,可以通过与开发环境其余部分相同的安装向导进行安装。

Windows Performance Toolkit 可作为 Windows 评估和部署工具包的一部分单独下载。 但是,命令行性能记录器工具预安装了 Windows 10 和 Windows 11 wpr.exe ,如 PowerShell 和命令提示符等 shell 的默认路径变量。

Performance Analyzer 作为 Microsoft Store 中的应用程序提供。

PerfView 在 PerfView GitHub Releases 页中作为独立下载提供。 无需安装。

针对高级性能分析方案进行自定义

Windows Performance Toolkit 还提供两个扩展点,可用于高级性能分析方案。

  • Microsoft Performance Toolkit SDK 处理跟踪数据的处理,使开发人员能够构建自己的插件,以在 Windows Performance Analyzer 中进行查看。
  • .NET TraceProcessing 允许创作可以将跟踪信息处理到生成的表中的自定义工具,对于批量跟踪数据的自动分析特别有用。

PerfView 同样基于 .NET TraceEvent 库,以编程方式使用性能跟踪。 TraceEvent 可以独立于 PerfView 来对性能跟踪数据执行自定义分析。

注意

若要使性能分析方案可正常运行,需要访问与进行测试的 Windows 应用程序关联的符号。 使用 Visual Studio 进行生成时,符号位置与调试方案设置中的位置相同(使用解决方案生成,或者从符号服务器捕获)。 分析其他库或组件时,必须找到这些组件的符号才能完成分析。

选择工具时的注意事项

要选择的工具取决于尝试探索的性能方案。 工具中的功能与特征的比较如下表所示:

提示

对于一般规则,请尽可能从 Visual Studio 分析开始。 在达到 Visual Studio 工具可以执行的操作的限制时,请转到 Windows Performance ToolkitPerfView

情况 Visual Studio 性能探查器 Windows 性能工具包 PerfView
常规使用注意事项
跟踪文件大小 ✔️ 🆗 🆗
工具的获取 ✔️ ✔️ ✔️
扩展性工具包 ✔️ ✔️
工作范围注意事项
单个进程或项目 ✔️ 🆗 🆗
多个进程 ✔️ ✔️
硬件注意事项
CPU 使用率 ✔️ ✔️ ✔️
GPU 使用情况 ✔️ ✔️
内存使用率 ✔️ ✔️ ✔️
设备输入/输出 ✔️ ✔️
电源使用情况 ✔️
系统句柄 ✔️ ✔️
代码语言支持注意事项
C/C++ 支持 ✔️ ✔️ ✔️
.NET 支持 ✔️ ✔️ ✔️
对 JavaScript 的支持 🆗 🆗 🆗
方案注意事项
Windows 事件跟踪 🆗 ✔️ ✔️
组合 ✔️
HTML/Edge/Internet Explorer/Webview ✔️
XAML/WinUI 🆗 ✔️ ✔️
音频/视频管道和小异常 ✔️
数据库计时 ✔️
托管对象分配和垃圾回收 ✔️ ✔️
自定义方案 ✔️ ✔️

密钥

  • ✔️ 良好支持:专为预期任务而设计,并实现可靠且详细的结果。
  • 🆗 支持:可能需要其他配置或步骤来实现所需结果。 可能包含类别中有限的操作范围。
  • ❌ 不支持:未设计为用于此用途。

常规使用注意事项

对于刚开始进行性能分析的用户,建议将 Visual Studio 性能探查器作为现有 Visual Studio 开发套件中集成良好的功能。 如果符合你的需求,建议在 PerfView 上使用 Visual Studio 性能探查器。

对于可能需要更强大功能和多功能性的更复杂的系统性能分析,建议使用 Windows Performance Toolkit,它由两种用于完成性能分析任务的工具组成:

  • Windows Performance Recorder(作为命令行工具并随图形界面提供)负责捕获跟踪会话。
  • Windows Performance Analyzer 会在稍后打开,以便对收集的数据进行后期处理并提供高度可自定义的分析视图。

Visual Studio 性能探查器提供的一些优点包括:

  • 对主要领域的性能分析进行了良好介绍
  • 基于项目配自动处理分析和调试的许多复杂方面
  • 自动突出显示主要关注领域
  • 更适合于只关注一个应用程序,具有更小、更集中的数据集和更小的收集范围
  • 更具体的侧重点可转化为在进行分析时对其他应用程序和计算机硬件的影响更小、生成和存储的跟踪文件的总体大小减小,以及收集完成后查看信息的处理速度提高
  • 启动和完成跟踪所花的时间更少,并且能够更快地进行查看和运转,因为 Visual Studio 性能探查器仅关注应用程序,而不是整个系统
  • 数据收集和结果分析都在 Visual Studio 内执行,分析页面会在收集结束时自动启动。 报告视图还会自动将焦点置于热点或操作区域上。

Windows Performance Toolkit 提供的一些优点包括:

  • Windows 性能和诊断团队提供了丰富的文档博客来帮助你入门
  • 更适合于收集非常大的文件,尤其是从忙于进行后台任务的系统进行收集。 它是一种用于收集信息的全方位工具,信息随后会在 Windows Performance Analyzer 接口中进行筛选。
  • 能够使用扩展点自定义,以实现高级性能分析方案。 (请参阅下文)

PerfView 提供的一些优势包括:

  • 全面的 内置文档和可从应用内链接的 Internet 操作说明视频
  • 只需复制PerfView.exe即可轻松地部署到生产环境。
  • 用于 捕获难以重现问题的飞行记录器模式
  • .NET 运行时服务的非常详细的诊断。
  • 自定义视图的可扩展。

工作范围注意事项

为了分析单个 应用程序 ,尤其是单个 过程,所有工具都非常有能力收集和理解性能。 不过 Visual Studio 性能探查器会更有优势,尤其是在应用程序源和项目系统已经可用时。 Visual Studio 性能探查器引擎设计为采用与 F5 调试功能类似的简化方式,从二进制文件收集 CPU、GPU 和内存信息。 虽然只关注手头的一个应用程序,但是此收集机制提供了更严密的运转和开发人员循环。

如果 Visual Studio 没有必要的功能,则选择 PerfView,由于集合要求(在生产环境中常见),或者需要更详细的 .NET 诊断功能,则无法运行。

对于复杂性较高的情形(包括多个跨进程请求、硬件设备及其驱动程序),或是若要深入了解 Windows平台技术,Windows Performance Toolkit 是最佳选择

硬件注意事项

Visual Studio 性能探查器、Windows Performance Toolkit 和 PerfView 可以诊断主要硬件组件的 CPU 和内存,Visual Studio Performance Profiler 和 Windows Performance Toolkit 还支持 GPU。 这些工具在这些领域的介绍性分析中通常非常匹配。

可以使用所有三个工具分析 CPU 使用率 ,通常使用采样进行捕获。 采样定期从应用程序捕获堆栈跟踪,并提供有关其出现频率的排名。 这两种工具都可以调整此行为,以改为使用检测进行精确记帐。

可以使用 Visual Studio 性能探查器和 Windows Performance Toolkit 来分析 GPU 使用情况 ,以捕获信息的一般概述。

可以使用所有三个工具分析内存使用情况 ,以收集堆空间和堆中分配关联的堆栈信息。

当出现更复杂的方案(例如分析网络、磁盘、设备、句柄或系统的整体功耗)时,Windows Performance Toolkit 更适合处理分析。 最好直接从操作系统收集这些数据,因为它会将请求调度到各种硬件组件。 Windows Performance Toolkit 与操作系统一起开发,因此它已准备就绪,能够收集这类更侧重于系统的信息。

代码语言支持注意事项

Windows Performance Toolkit 主要侧重于支持 C 和 C++,因为这些语言在 Windows 操作系统基本代码中使用。

Visual Studio 性能探查器支持侧重于更广泛的编程语言,从源自 .NET 的技术(如 C# 和 ASP.NET)开始,然后向外扩展。

PerfView 支持 .NET 和本机 (C 和 C++) 应用程序。 它深入了解 .NET 运行时,以及有关 ASP.NET Web 工作负载的功能。

这不是说 Visual Studio 无法分析 C 或C++代码,或者 Windows 性能分析器无法分析 .NET 应用程序,或者 PerfView 无法分析 Web 应用程序。 而是最好从与所分析的应用程序最匹配的工具开始,以利用每种工具的优势。

方案注意事项

所有工具都包含多个基于方案的选项,用于研究应用程序性能。

Visual Studio 性能探查器选项往往侧重于 .NET、用户界面 (UI) 以及驻留在所分析的应用程序中的数据库。

Windows Performance Toolkit 往往侧重于操作系统组件和框架,如组合、浏览器视图和实时处理管道中的小异常。

对于需要更加自定义的解决方案的方案,Windows Performance Recorder 可以将系统范围收集和应用程序相关收集数据合并到单个记录会话中。 此功能让应用程序开发人员可以提供完整的解决方案来部署到客户,以便从可能与用于开发产品的硬件不同的硬件请求获得性能数据。 有关此机制的详细信息,请参阅 Windows 性能和诊断团队撰写的创作自定义配置文件博客系列。

PerfView 针对 .NET 应用程序和运行时进行深入调查,但在多进程和操作系统级别调查中同样有能力。

总结

Visual Studio Performance Profiler、Windows Performance Toolkit 和 PerfView 是三种可靠的工具,Microsoft可供你了解应用程序的性能。 选择最能满足你需求的工具需要针对你的特定情形考虑各种因素。 我们希望本指南可提供做出明智的性能分析选择所需的信息,不过也欢迎你在此页面下面提交反馈,或者对于专门与 Windows 开发性能相关的问题,请在 Windows 开发性能存储库上提交问题。