参考:Windows Performance Analyzer 视图

Visual Studio 2019 及更高版本中提供了 C++ Build Insights 工具。 若要查看此版本对应的文档,请将本文的 Visual Studio“版本”选择器控件设置为“Visual Studio 2019 或更高版本”。 它位于此页面上目录表的顶部。

本文详细介绍了 Windows Performance Analyzer (WPA) 中可用的每个 C++ Build Insights 视图。 使用此页可查找:

  • 数据列说明;以及
  • 每个视图的可用预设,包括其预期用途和首选视图模式。

如果你是刚开始接触 WPA,建议先了解适用于 C++ Build Insights 的 WPA 基础知识

生成资源管理器

“生成资源管理器”视图用于:

  • 诊断并行度问题;
  • 确定生成时间是否由解析、代码生成或链接所支配;以及
  • 识别瓶颈和耗时异常长的生成活动。

“生成资源管理器”视图数据列

列名 说明
BuildTimelineDescription 发生当前活动或属性的时间线的文本说明。
BuildTimelineId 发生当前活动或属性的时间线的标识符(从零开始)。
组件 当前事件发出时正在编译或链接的组件。 如果没有组件与这一事件关联,此列的值为 <Invocation X Info>。 X 是在事件发出时执行的调用的唯一数值标识符。 此标识符与这一事件的 InvocationId 列中的标识符相同。
计数 此数据行表示的活动或属性的数量。 此值始终为 1,只在对多行进行分组的聚合方案中有用。
ExclusiveCPUTime 此活动使用的 CPU 时间量(以毫秒为单位)。 此时间量不包括子活动所用的时间。
ExclusiveDuration 活动的持续时间(以毫秒为单位)。 此时间量不包括子活动的持续时间。
InclusiveCPUTime 此活动和所有子活动使用的 CPU 时间量(以毫秒为单位)。
InclusiveDuration 此活动的持续时间(以毫秒为单位),包括所有子活动的持续时间。
InvocationDescription 发生此事件的调用的文本说明。 此说明包括它是 cl.exe 还是 link.exe,以及唯一数值调用标识符。 它还包括在调用期间编译或链接的组件的完整路径(若有)。 对于没有生成任何组件的调用或生成多个组件的调用,路径是空白的。 此调用标识符与 InvocationId 列中的标识符相同。
InvocationId 发生此事件的调用的唯一数值标识符。
名称 此事件表示的活动或属性的名称。
时间 标识事件发生时间的时间戳。
工具 发生此事件时执行的工具。 此列的值为 CL 或 Link。
类型 当前事件的类型。 此值为 Activity 或 Property。
如果当前事件是属性,则此列包含属性值。 如果当前事件是活动,则此列保留为空白。

“生成资源管理器”视图预设

预设名称 首选视图模式 使用方法
活动统计信息 图形/表 使用此预设来查看所有“生成资源管理器”活动的聚合统计信息。 在表模式下,可以一目了然地判断生成是否由解析、代码生成或链接器所支配。 每个活动的聚合持续时间按降序排序。 通过展开顶部节点进行钻取,可以轻松地找到哪些调用在这些排名靠前的活动中花费的时间最多。 如果愿意,可以调整 WPA 设置,以显示平均值或其他类型的聚合。 在图形模式下,可以查看在生成过程中每个活动何时处于活动状态。
调用 图形 在图形视图中向下滚动查看按开始时间排序的调用列表。 可以将它与“CPU (采样)”视图一起使用,以查找与低 CPU 使用率区域匹配的调用。 检测并行度问题。
调用属性 快速查找有关给定编译器或链接器调用的关键信息。 确定它的版本、工作目录或用于调用它的完整命令行。
时间线 图形 查看关于生成如何并行化的条形图。 一眼就能识别并行度问题和瓶颈。 配置 WPA,根据需要为条形分配不同的含义。 选择“调用说明”作为最后一个分组列,以查看所有调用的彩色编码条形图。 它可以帮助你快速识别耗费时间的主要原因。 然后,放大并选择活动名称作为最后一个分组列,以查看最长的部分。

文件

“文件”视图用于:

  • 确定最常包含的头;以及
  • 帮助你决定要在预编译头 (PCH) 中包含什么。

“文件”视图数据列

列名 说明
活动名称 发出此文件事件时正在进行的活动。 目前,此值始终为 Parsing
BuildTimelineDescription *
BuildTimelineId *
组件 *
计数 *
深度 此文件在包含树中的位置(从零开始)。 计数从包含树的根开始。 值 0 通常对应于 .c/.cpp 文件。
ExclusiveDuration *
IncludedBy 包含当前文件的文件的完整路径。
IncludedPath 当前文件的完整路径。
InclusiveDuration *
InvocationId *
开始时间 表示当前文件事件发出时间的时间戳。
工具 *

* 此列的值与内部版本资源管理器视图中的值相同。

“文件”视图预设

预设名称 首选视图模式 使用方法
统计信息 查看按降序排序的列表,了解哪些文件的聚合分析时间最长。 使用此信息来帮助你重新构建头或决定要在 PCH 中包含什么。

函数

“函数”视图用于标识代码生成时间过长的函数。

“函数”视图数据列

列名 说明
活动名称 发出此函数事件时正在进行的活动。 目前,此值始终为 CodeGeneration
BuildTimelineDescription *
BuildTimelineId *
组件 *
计数 *
持续时间 此函数的代码生成活动的持续时间。
函数名称 正在生成代码的函数的名称。
InvocationId *
开始时间 表示当前函数事件发出时间的时间戳。
工具 *

* 此列的值与内部版本资源管理器视图中的值相同。

“函数”视图预设

预设名称 首选视图模式 使用方法
统计信息 查看按降序排序的列表,了解哪些函数的聚合代码生成时间最长。 它们可能暗示代码在哪些地方过度使用了 __forceinline 关键字,或者某些函数可能太大了。
时间线 图形 查看此条形图,了解生成时间最长的函数的位置和持续时间。 确定它们是否与“生成资源管理器”视图中的瓶颈匹配。 如果匹配,则采取适当的措施来缩短代码生成时间,并有利于生成时间。

另请参阅

C++ Build Insights 入门
参考:vcperf 命令
教程:Windows Performance Analyzer 基础知识
Windows 性能分析器