在 Visual Studio(C#、C++、Visual Basic、F#)中检测 .NET 应用程序
随着 Visual Studio 2022 版本 17.5 的发布,你可以使用新的动态检测工具。 此工具显示调用函数的确切次数,并且与早期版本的检测工具相比,此工具的速度更快。 此工具支持 .NET Core 检测,而无需使用 PDB。 从 Visual Studio 2022 版本 17.6 预览版 2 开始,该工具还支持 C/C++。
该工具类似于 CPU 使用情况工具,只不过它基于时钟时间而不是 CPU 使用率。 这意味着,与 CPU 使用情况工具不同,阻塞的时间(如等待锁定的时间)将显示在检测跟踪中。 有关了解如何有效使用检测工具的其他信息,请参阅 检测概述 和 案例研究:隔离性能问题。
检测应用程序
选择 Alt+F2(或“调试”>“性能探查器”),以在 Visual Studio 中打开性能探查器。
选中“检测”复选框。
如果在启动探查器之前启用了“在暂停后开始收集”选项,则在诊断会话视图中选择“记录”按钮之前,不会收集数据。
注意
如果无法选择该工具,请清除所有其他工具的复选框,因为某些工具需要单独运行。 若要详细了解如何一起运行工具,请参阅同时使用多种探查器工具。
如果该工具仍不可用,请检查项目是否满足前面的要求。 请确保项目处于“发布”模式,以便捕获最准确的数据。
选择“开始”按钮以运行该工具。
选择要检测的程序中的项。
从 Visual Studio 2022 版本 17.11 预览版 1 开始,探查器将保留所选项以供下一次分析运行。
选择“确定”。
在此工具开始运行后,在应用中完成要探查的方案。 然后,选择“停止收集”或关闭应用,以查看数据。
分析检测报告
分析数据将显示在 Visual Studio 中。
“检测数据”视图显示按最长运行时间排序的函数列表,运行时间最长的函数在“排名靠前的函数”下排在最前面。 “热路径”部分显示使用时间最多的函数的调用堆栈。 这些列表有助于将你引导至发生性能瓶颈的函数。
单击感兴趣的函数,你将看到更详细的视图。
可用数据类似于 CPU 使用情况工具,只不过它基于时钟时间和调用计数而不是 CPU 使用率。
分析见解
如果顶级见解部分显示任何见解,请使用提供的链接获取有关所标识问题的详细信息。 有关详细信息,请参阅 CPU 见解;但请注意,检测工具的信息特定于时钟时间而不是 CPU 利用率。
此外,如果使用 Copilot,请使用询问 Copilot 按钮打开 Copilot 聊天窗口,Copilot 将根据代码检查和任何已发现的问题提供建议。
分析检测详细报告
若要分析检测报告,请单击打开详细信息,或单击其中一个排名靠前的函数打开函数视图。
报表提供诊断数据的不同视图:
- 调用方/被调用方
- 调用树
- 模块
- 函数
- 火焰图
在除调用方/被调用方之外的所有视图中,诊断报告按总计 [单位,%] 从最高到最低进行排序。 通过选择列标题更改排序顺序或排序列。 可以双击感兴趣的函数,将看到该函数的源,并且该函数中所用时间的分布情况会突出显示。 该表显示包含数据(例如函数中所用的时间)的列,包括所调用的函数(总计),以及显示函数中所用时间的另一列,不包括调用的函数(自身)。
此数据可以帮助评估函数本身是否属于性能瓶颈。 确定方法显示的数据量,看看第三方代码或运行时库是否是终结点速度慢或资源消耗量大的原因。
有关使用火焰图的详细信息,请参阅使用火焰图识别热路径。
检测调用树
要查看调用关系树,请选择报表中的父节点。 默认情况下,检测页面将打开调用方/被调用方视图。 在“当前视图”下拉列表中,选择“调用树” 。 调用树视图可帮助你快速识别性能瓶颈。
可以单击展开热路径和显示热路径按钮,以查看调用树视图中使用最多挂钟时间的函数调用。
下面是列值的详细信息:
总计指示在函数及其调用的任何函数中花费了多少时间。 高总计值指向消耗最多时钟时间的函数。
自我指示在函数体中花费了多少时间,不包括在它调用的任何函数中花费的时间。 高自我值可能指示函数自身内部的性能瓶颈。
调用计数指示调用函数的次数。
模块 包含函数的模块的名称。