Visual Studio 提供了各种分析工具,可帮助你根据应用类型诊断不同类型的应用性能问题。 在本文中,我们将提供信息,帮助你找到适合你的方案和应用程序类型的工具。
有关使用分析工具优化代码的一般方法,请参阅 案例研究:优化代码初学者指南。
我应使用哪种工具?
下表列出了 Visual Studio 提供的不同工具,并提供用于选择该工具的常见方案。
性能工具 | 描述 | 何时使用该工具? |
---|---|---|
CPU 使用率 | 显示 CPU 花费时间的位置。 | • 开始调查常规性能问题。 • 调查高服务器 CPU 使用率。 • 调查 DevOps 方案,例如当订单未通过零售网站时。 • 优化 CPU 使用率。 • 调查 API 调用中的延迟。 |
火焰图 | 在 CPU 使用率工具中查看,该工具提供调用树的备用可视化效果。 | 调查 API 调用中的延迟 |
热路径 | 在 CPU 使用率工具中查看,该工具显示应用程序耗用大部分 CPU 时间的位置。 | 调查 API 调用中的延迟 |
内存使用情况 | 显示应用的内存,以查找内存泄漏等问题。 | • 优化内存使用情况 • 调查 UI 冻结 • 调查可疑内存泄漏(本机代码) |
.NET 对象分配 | 显示分配 .NET 对象的位置以及有关垃圾回收的信息。 | • 优化 .NET 内存使用情况 • 分析垃圾回收 |
检测 | 显示确切的呼叫计数和呼叫时间。 | • 你需要“CPU 使用率”这样的工具,但你想要知道在函数中耗费的确切调用计数和时间(基于时钟时间) • 你想要看到阻塞时间,例如等待锁定的时间。 • 注意:该工具需要额外的开销。 |
文件输入/输出 | 显示文件 I/O 操作以及它们花费的时间以及处理的数据量。 | 调查用户界面冻结 |
性能提示 | 显示与代码交互时性能信息的快速度量。 | 调试时,需要查看上一步操作(或断点)与当前步骤或断点之间的已用时间。 |
事件查看器 | 显示 HTTP 请求、日志消息和异常。 | • 调查 API 调用 中的延迟 • 调查远程 Web 服务器上运行缓慢的应用程序 |
.NET Async | 显示 .NET 应用中的异步/等待使用情况。 | 调查异步代码的可疑性能问题。 |
.NET 计数器 | .NET 计数器的实时报告。 | • 开始调查常规性能问题。 • 需要跟踪基于 .NET 计数器的指标,例如每秒异常、垃圾回收和 CPU 使用率。 |
数据库 | 显示数据库查询的性能。 | 调查使用 ADO.NET 或 Entity Framework Core 的数据库查询的性能。 |
GPU 使用情况 | 显示 Direct3D 应用的高级硬件使用情况。 | 检查应用的性能是 CPU 绑定还是 GPU 绑定。 |
应用程序时间线 | 显示 XAML 应用的 UI 性能。 | 调查 XAML 应用中的 UI 性能,例如渲染帧所用的时间。 |
IntelliTrace | 调试器工具,可用于记录事件并在各种执行点检查应用程序状态。 | 你需要一个工具在各种点检查应用程序状态,而不仅仅是当前应用程序状态。 |
我的项目支持哪些工具?
下表列出了 Visual Studio 产品/服务的不同工具以及可用于它们的不同项目类型:
性能工具 | .NET | C/C++ | UWP(通用Windows平台) | ASP.NET/ASP.NET Core |
---|---|---|---|---|
CPU 使用率 | 是的 | 是的 | 是的 | 是的 |
内存使用情况 | 是的 | 是的 | 是的 | 是的 |
.NET 对象分配 | 是的 | 不 | 是的 | 是的 |
检测 | 是的 | 是的 | 是的 | 是的 |
文件输入/输出 | 是的 | 是的 | 是的 | 是的 |
性能提示 | 是的 | 是的 | 是的 | 是的 |
事件查看器 | 是的 | 是的 | 是的 | 是的 |
.NET Async | 是的 | 不 | 是的 | 是的 |
.NET 计数器 | 是 (.NET Core/5+ 仅限) | 不 | 不 | 是(仅限 ASP.NET 核心) |
数据库 | 是 (.NET Core/5+ 仅限) | 不 | 不 | 是(仅限 ASP.NET 核心) |
GPU 使用情况 | 是的 | 是的 | 是的 | 不 |
应用程序时间线 | 是(XAML) | 不 | 是的 | 不 |
性能资源管理器 | 不 | 不 | 不 | 不 |
IntelliTrace | 仅适用于带有 Visual Studio Enterprise 的 .NET | 不 | 仅适用于带有 Visual Studio Enterprise 的 .NET | 仅适用于带有 Visual Studio Enterprise 的 .NET |
对 CMake 项目的支持与C++相同。 但是,必须选择“可执行文件”作为启动项目,将可执行文件设置为性能探查器(Alt + F2)中的目标。
Linux 支持哪些工具?
以下工具在 Linux、WSL 和 Windows 作为目标平台时均受支持:
- CPU 使用率
- .NET 对象分配跟踪
- .NET Async
- .NET 计数器
- 事件查看器
- 数据库
了解如何使用探查器
以下文章和博客文章提供了详细信息,可帮助你了解如何有效地使用 Visual Studio 性能工具。