リファレンス: Windows パフォーマンス アナライザー ビュー
C++ Build Insights ツールは、Visual Studio 2019 以降で使用できます。 このバージョンのドキュメントを表示するには、この記事の Visual Studio の [バージョン] セレクター コントロールを Visual Studio 2019 以降に設定してください。 このページの目次の一番上にあります。
この記事では、Windows Performance Analyzer (WPA) で使用できる C++ Build Insights の各ビューの詳細について説明します。 このページでは次のことがわかります。
- データ列の説明。
- 用途や優先する表示モードなど、各ビューに使用できるプリセット。
WPA を初めて使用する場合は、最初に、C++ Build Insights 用の WPA の基本について理解しておくことをお勧めします。
ビルド エクスプローラー
ビルド エクスプローラー ビューは、次の場合に使用します。
- 並列処理の問題を診断する
- ビルド時間が、解析、コード生成、またはリンクのどれに偏っているかを判断する
- ボトルネックと、異常に長いビルド アクティビティを識別する。
ビルド エクスプローラー ビューのデータ列
列名 | 説明 |
---|---|
BuildTimelineDescription | 現在のアクティビティまたはプロパティが発生しているタイムラインについての説明。 |
BuildTimelineId | 現在のアクティビティまたはプロパティが発生しているタイムラインの、0 から始まる識別子。 |
コンポーネント | 現在のイベントが生成されたときにコンパイルまたはリンクされていたコンポーネント。 このイベントに関連付けられているコンポーネントがない場合、この列の値は <Invocation X Info> になります。 X は、イベントが生成された時点で実行されていた呼び出しに対する一意の数値識別子です。 この識別子は、このイベントの InvocationId 列にあるものと同じです。 |
カウント | このデータ行によって表されるアクティビティまたはプロパティの数。 この値は常に 1 であり、複数の行がグループ化されているときの集計シナリオにおいてのみ役立ちます。 |
ExclusiveCPUTime | このアクティビティによって使用された CPU 時間 (ミリ秒)。 子アクティビティで費やされた時間は、この値には含まれません。 |
ExclusiveDuration | アクティビティの継続時間 (ミリ秒)。 子アクティビティの継続時間は、この値には含まれません。 |
InclusiveCPUTime | このアクティビティとすべての子アクティビティによって使用された CPU 時間 (ミリ秒)。 |
InclusiveDuration | このアクティビティの継続時間 (ミリ秒)。すべての子アクティビティが含まれます。 |
InvocationDescription | このイベントが発生した呼び出しの説明。 説明には、それが cl.exe または link.exe のどちらであったか、および一意の数値呼び出し識別子が含まれます。 該当する場合は、呼び出しの間にコンパイルまたはリンクされたコンポーネントへの完全なパスが含まれます。 コンポーネントが何もビルドされない呼び出し、または複数のコンポーネントがビルドされる呼び出しの場合、パスは空白になります。 呼び出し識別子は、InvocationId 列のものと同じです。 |
InvocationId | このイベントが発生した呼び出しの一意の数値識別子。 |
Name | このイベントによって表されるアクティビティまたはプロパティの名前。 |
時刻 | イベントが発生したときを示すタイムスタンプ。 |
ツール | このイベントが発生したときに実行されていたツール。 この列の値は CL または Link です。 |
Type | 現在のイベントの種類。 この値は、Activity または Property です。 |
値 | 現在のイベントがプロパティの場合、この列にはその値が含まれます。 現在のイベントがアクティビティの場合、この列は空白のままになります。 |
ビルド エクスプローラー ビューのプリセット
プリセット名 | 優先されるビュー モード | 使い方 |
---|---|---|
アクティビティ統計情報 | グラフ/テーブル | このプリセットは、すべてのビルド エクスプローラー アクティビティの集計された統計情報を表示するために使用します。 テーブル モードでは、ビルドで最も時間がかかったのが解析、コード生成、リンカーのいずれであるかが一目でわかります。 各アクティビティの集計された継続時間は、降順に並べ替えられます。 最上位ノードを展開してドリルインすることで、これらの最上位アクティビティで最も時間がかかる呼び出しを簡単に見つけることができます。 必要に応じて、WPA の設定を調整し、平均や他の種類の集計を表示できます。 グラフ モードでは、ビルドの間のどの時点で各アクティビティがアクティブになっているかがわかります。 |
呼び出し | グラフ | 開始時刻で並べ替えられたグラフ ビュー内の呼び出しの一覧を下にスクロールします。 それを CPU (サンプリング済み) ビューと共に使用して、CPU 使用率が低いゾーンに一致する呼び出しを見つけることができます。 並列処理の問題を検出します。 |
呼び出しプロパティ | テーブル | 特定のコンパイラまたはリンカーの呼び出しに関する重要な情報がすばやく見つかります。 バージョン、作業ディレクトリ、または呼び出しに使用された完全なコマンド ラインを確認します。 |
タイムライン | グラフ | ビルドがどのように並列処理されたかを棒グラフで確認できます。 並列処理の問題とボトルネックが一目でわかります。 必要に応じて WPA を構成し、異なる意味を棒に割り当てます。 すべての呼び出しの色分けされた棒グラフを表示するには、グループ化された最後の列として、呼び出しの説明を選択します。 これは、時間がかかっている原因をすばやく特定するのに役立ちます。 次に、ズームインし、グループ化された最後の列としてアクティビティ名を選択して、最も長い部分を表示します。 |
ファイル
ファイル ビューは、次の場合に使用します。
- 最も多くインクルードされているヘッダーを特定する
- プリコンパイル済みヘッダー (PCH) に含めるものを決定するときの参考にする。
ファイル ビューのデータ列
列名 | 説明 |
---|---|
ActivityName | このファイル イベントが生成されたときに実行中のアクティビティ。 現在、この値は常に Parsing になります。 |
BuildTimelineDescription | * |
BuildTimelineId | * |
コンポーネント | * |
カウント | * |
深さ | このファイルが見つかるインクルード ツリー内の 0 から始まる位置。 カウントは、インクルード ツリーのルートから始まります。 値 0 は、通常、.c または .cpp ファイルに対応します。 |
ExclusiveDuration | * |
IncludedBy | 現在のファイルが含まれていたファイルへの完全なパス。 |
IncludedPath | 現在のファイルの完全なパス。 |
InclusiveDuration | * |
InvocationId | * |
StartTime | 現在のファイル イベントが生成された時刻を表すタイムスタンプ。 |
ツール | * |
* この列の値は、ビルド エクスプローラー ビューと同じです。
ファイル ビューのプリセット
プリセット名 | 優先されるビュー モード | 使い方 |
---|---|---|
統計 | テーブル | 降順の一覧を見て、集計された解析時間が最も長かったファイルを確認できます。 この情報は、ヘッダーを再構築したり、PCH に含めるものを決定したりするのに役立ちます。 |
関数
関数ビューは、コード生成時間が過度に長い関数を識別するために使用されます。
関数ビューのデータ列
列名 | 説明 |
---|---|
ActivityName | この関数イベントが生成されたときに実行中のアクティビティ。 現在、この値は常に CodeGeneration になります。 |
BuildTimelineDescription | * |
BuildTimelineId | * |
コンポーネント | * |
カウント | * |
Duration | この関数のコード生成アクティビティの継続時間。 |
FunctionName | コード生成中の関数の名前。 |
InvocationId | * |
StartTime | 現在の関数イベントがいつ生成されたかを表すタイムスタンプ。 |
ツール | * |
* この列の値は、ビルド エクスプローラー ビューと同じです。
関数ビューのプリセット
プリセット名 | 優先されるビュー モード | 使い方 |
---|---|---|
統計 | テーブル | 降順の一覧を見て、集計されたコード生成時間が最も長かった関数を確認できます。 コードで __forceinline キーワードが過剰に使用されている場所、または関数が大きすぎることのヒントになる場合があります。 |
タイムライン | グラフ | この棒グラフを見て、生成に最も時間がかかる関数の場所と継続時間を確認します。 それらがビルド エクスプローラー ビューのボトルネックと一致しているかどうかを確認します。 そうである場合は、適切なアクションを実行して、コード生成時間を短縮し、ビルド時間を向上させます。 |
関連項目
C++ Build Insights を使ってみる
リファレンス: vcperf コマンド
チュートリアル: Windows パフォーマンス アナライザーの基本
Windows Performance Analyzer