我应使用哪种性能工具? (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 性能工具。