我应使用哪种性能工具? (C#、Visual Basic、C++、F#)

Visual Studio 提供了各种分析工具,可依据你的应用类型帮助你诊断不同种类的应用性能问题。 本文提供的信息可帮助你找到适合你的方案和应用程序类型的工具。

有关使用分析工具优化代码的一般方法,请参阅案例研究 - 初学者代码优化指南

应使用哪一种工具?

下表列出了 Visual Studio 提供的不同工具,并提供了选择该工具的常见场景。

性能工具 说明 何时使用此工具?
CPU 使用率 显示 CPU 耗用时间的位置。 • 开始调查一般的性能问题。
• 调查高服务器 CPU 使用率。
• 调查 DevOps 场景,例如订单无法发送到零售网站的情况。
• 优化 CPU 使用率。
• 调查 API 调用中的延迟。
火焰图 在 CPU 使用率工具中查看,该工具提供调用树的备用可视化效果。 调查 API 调用中的延迟
热路径 在 CPU 使用率工具中查看,该工具显示应用程序耗用大部分 CPU 时间的位置。 调查 API 调用中的延迟
内存使用率 显示应用内存以查找内存泄漏等问题。 • 优化内存使用情况
• 调查 UI 冻结
• 调查可疑内存泄漏(本机代码)
.NET 对象分配 显示 .NET 对象的分配位置以及有关垃圾回收的信息。 • 优化 .NET 内存使用情况
• 分析垃圾回收
检测 显示确切的调用计数和调用时间。 • 需要类似于 CPU 使用率的工具,但希望根据壁挂时钟时间确定在函数中花费的确切调用计数和时间。
• 你希望确定被阻止的时间,例如等待锁所用的时间。
• 注意:此工具需要额外的开销。
文件 I/O 显示文件 I/O 操作以及它们花费的时间和要处理的数据量。 调查 UI 冻结
性能提示 显示与代码交互时性能信息的快速度量。 调试时,你希望查看上一步操作(或断点)到当前步骤或断点之间的运行时间。
事件查看器 显示 HTTP 请求、日志消息和异常。 • 调查 API 调用中的延迟
• 调查远程 Web 服务器上运行缓慢的应用程序
.NET Async 显示 .NET 应用中的异步/await 使用情况。 调查怀疑异步代码存在的性能问题。
.NET 计数器 .NET 计数器的实时报告。 • 开始调查常规性能问题。
• 需要跟踪基于 .NET 计数器的指标,例如每秒异常数、垃圾回收和 CPU 利用率。
Database 显示数据库查询性能。 调查使用 ADO.NET 或 Entity Framework Core 的数据库查询的性能。
GPU 使用情况 显示 Direct3D 应用的高级硬件使用情况。 检查应用性能是受 CPU 限制还是受 GPU 限制。
应用程序时间线 显示 XAML 应用的 UI 性能。 调查 XAML 应用中的 UI 性能,例如呈现帧所用的时间。
IntelliTrace 调试器工具可用于记录事件,并检查应用程序在不同执行点的状态。 你需要一个工具来检查应用程序在不同点的状态,而不仅仅是当前应用程序状态。

我的项目支持哪些工具?

下表列出了 Visual Studio 提供的不同工具以及适用的不同项目类型:

性能工具 .NET C/C++ UWP ASP.NET/ASP.NET Core
CPU 使用率
内存使用率
.NET 对象分配
检测
文件 I/O
性能提示
事件查看器
.NET Async
.NET 计数器 是(仅限 .NET Core/5 及更高版本) 是(仅限 ASP.NET Core)
Database 是(仅限 .NET Core/5 及更高版本) 是(仅限 ASP.NET Core)
GPU 使用情况
应用程序时间线 是 (XAML)
性能资源管理器
IntelliTrace 仅适用于带有 Visual Studio Enterprise 的 .NET 仅适用于带有 Visual Studio Enterprise 的 .NET 仅适用于带有 Visual Studio Enterprise 的 .NET

在 Linux 上支持哪些工具?

在目标平台为 Linux 和 Windows 时,以下工具受支持:

  • CPU 使用率
  • .NET 对象分配跟踪
  • .NET Async
  • .NET 计数器
  • 事件查看器
  • 数据库

了解如何使用探查器

以下文章和博客文章提供了详细信息,可帮助你了解如何有效地使用 Visual Studio 性能工具。