从命令行测量应用程序性能

可以使用命令行工具收集有关应用程序的性能信息。 可以收集 CPU 使用率、.NET 内存分配、检测和数据库查询的性能数据。

在本文中所述的示例中,你将收集Microsoft记事本的性能信息,但同一方法可用于分析任何进程。

注意

若要从命令行生成已检测的 C/C++ 组件,请参阅检测本机独立组件,然后按本文中的步骤操作。 对于 CPU 使用情况数据,可以使用本文中所述的过程。

先决条件

  • Visual Studio 2019 或更高版本

  • 熟悉命令行工具

  • 若要在未安装 Visual Studio 的远程计算机上收集性能信息,请在远程计算机上安装 Remote Tools for Visual Studio。 工具的版本必须与 Visual Studio 的版本匹配。

大多数收集代理都支持 .NET Core、.NET 5+、.NET Framework 和 C++。 但是,支持仅限于相应性能工具提供的支持。 例如,数据库 收集代理仅限于 .NET Core 和 .NET 5+。

收集性能数据

使用 Visual Studio 诊断 CLI 工具进行性能分析的工作原理是将性能分析工具与其中某个收集器代理一起附加到进程。 附加分析工具时,将开始一个诊断会话,该会话捕获并存储分析数据,直到工具停止,此时数据将导出到 .diagsession 文件中。 然后,可以在 Visual Studio 中打开此文件以分析结果。

  1. 启动记事本,然后打开任务管理器以获取其进程 ID(PID)。 在任务管理器中,在“详细信息” 选项卡中找到 PID。

  2. 打开命令提示符,并切换到包含集合工具可执行文件的目录,通常位于此处(适用于 Visual Studio Enterprise)。

    <Visual Studio installation folder>\2022\Enterprise\Team Tools\DiagnosticsHub\Collector\

    <Visual Studio installation folder>\2019\Enterprise\Team Tools\DiagnosticsHub\Collector\

    对于远程工具,收集代理可执行文件位于以下位置:

    Program Files\Microsoft Visual Studio 17.0\Team Tools\DiagnosticsHub\Collector\

    Program Files\Microsoft Visual Studio 16.0\Team Tools\DiagnosticsHub\Collector\

    注意

    在远程方案中使用命令行时,需要在远程计算机上运行命令行说明。 如果要从 Visual Studio 附加到远程计算机,请改用 Visual Studio 中的性能探查器。

  3. 键入以下命令启动 VSDiagnostics.exe

    VSDiagnostics.exe start <id> /attach:<pid> /loadConfig:<configFile>
    

    需要包含的参数有:

    • <id> 标识集合会话。 ID 必须是介于 1-255 之间的数字。
    • <pid>,要分析的进程 PID,就是您在步骤 1 中找到的 PID。
    • <configFile>,要启动的收集代理的配置文件。 有关详细信息,请参阅代理的配置文件

    例如,可以通过替换前面所述的 pid,对 CPUUsageBase 代理使用以下命令。

    VSDiagnostics.exe start 1 /attach:<pid> /loadConfig:AgentConfigs\CPUUsageLow.json
    

    或者,可以使用 launch 命令启动可执行文件。 在此方案中,无需获取进程 ID 并附加到它。 所有工具都支持 launch 命令,尽管有些工具不支持 attach,例如检测和 .NET 分配工具。 例如,使用以下命令启动可执行文件并收集检测数据:

    VSDiagnostics start <id> /launch:<ExeToProfile> /loadConfig:AgentConfigs\PerfInstrumentation.json
    
  4. 调整记事本的大小,或在其中输入一些内容,以确保收集到一些有趣的评估信息。

  5. 通过键入以下命令停止收集会话并将输出发送到文件。

    VSDiagnostics.exe stop <id> /output:<path to file>
    
  6. 找到上一命令的 .diagsession 文件输出,并在 Visual Studio(文件>打开)中打开该文件以检查收集的信息。

    若要分析结果,请参阅相应性能工具的文档。 例如,这可能是 CPU 使用率.NET 对象分配工具检测数据库 工具。

代理配置文件

集合代理是可互换的组件,根据要测量的数据收集不同类型的数据。

为方便起见,建议将该信息存储在代理配置文件中。 配置文件是一个 .json 文件,该文件至少包含 .dll 及其 COM CLSID 的名称。 默认情况下,可以在以下文件夹中找到示例配置文件:

Program Files\Microsoft Visual Studio\<version>\<sku>\Team Tools\DiagnosticsHub\Collector\AgentConfigs

CpuUsage 配置(基本/高/低),对应于为 CPU 使用情况分析工具收集的数据。 DotNetObjectAlloc 配置(基本/低),对应于为 .NET 对象分配工具收集的数据。

基本/低/高配置是指采样率。 例如,Low 为 100 个样本/秒,High 为 4000 个样本/秒。

为了使 VSDiagnostics.exe 工具与收集代理一起工作,其需要相应代理的 DLL 和 COM CLSID。 代理可能还具有其他配置选项,这可以是配置文件中指定的任何选项,格式为正确转义的 JSON。

权限

若要分析需要提升权限的应用程序,必须从提升的命令提示符中执行操作。