次の方法で共有


Visual Studio で .NET アプリケーションをインストルメント化する (C#、C++、Visual Basic、F#)

Visual Studio 2022 バージョン 17.5 のリリースでは、新しい動的インストルメンテーション ツールを使用できます。 このツールでは、関数が呼び出された正確な回数が示され、以前のバージョンのインストルメンテーション ツールよりも高速です。 このツールでは、PDB を必要とすることなく .NET Core インストルメンテーションがサポートされます。 Visual Studio 2022 バージョン 17.6 Preview 2 以降、このツールでは C/C++ もサポートされています。

このツールは CPU 使用率ツールに似ていますが、CPU 使用率ではなく実時間に基づいている点が異なります。 これは、CPU 使用率ツールとは異なり、ロックの待機に費やされた時間などのブロックされた時間がインストルメンテーション トレースに表示されることを意味します。 インストルメンテーション ツールを効果的に使用する方法の詳細については、インストルメンテーションの概要と、「ケース スタディ: パフォーマンスの問題を分離する」を参照してください。

アプリケーションのインストルメンテーション

  1. Visual Studio でパフォーマンス プロファイラーを開くには、Alt + F2 キー、または [デバッグ] > [パフォーマンス プロファイラー]選択します。

  2. [インストルメンテーション] チェック ボックスをオンにします。

    インストルメンテーション ツールが選択されていることを示すスクリーンショット。

    プロファイラーを起動する前に [コレクションを一時停止した状態で開始] オプションを有効にした場合、診断セッション ビューで [記録] ボタンを選択するまでデータは収集されません。

    メモ

    ツールを選択できない場合は、他のすべてのツールのチェック ボックスをオフにしてください。これは一部のツールは単独で実行される必要があるためです。 複数のツールを一緒に実行する方法の詳細については、「複数のプロファイラー ツールの同時使用」を参照してください。

    それでもツールを使用できない場合は、プロジェクトが前述の要件を満たしていることを確認します。 プロジェクトが最も正確なデータを取得するためのリリース モードになっていることを確認します。

  3. [開始] ボタンを選択してツールを実行します。

  4. インストルメント化するプログラムの項目を選択します。

    [インストルメント化する項目を選択する] ダイアログを示すスクリーンショット。

    Visual Studio 2022 バージョン 17.11 以降では、プロファイラーは次のプロファイリング実行のために選択した項目を保持します。

    Visual Studio 2022 バージョン 17.13 Preview 1 以降では、C++ 用にインストルメント化する項目を選択できます。

  5. [OK]を選択します。

  6. ツールの実行が開始されたら、アプリ内でプロファイリングするシナリオを完了します。 次に、[収集の停止] を選択するかアプリを閉じてデータを確認します。

インストルメンテーション レポートを分析する

プロファイル データが Visual Studio に表示されます。

.NET インストルメンテーション データを示すスクリーンショット。

インストルメンテーション データ ビューには、実行時間順に並べ替えられた関数の一覧が表示され、実行時間が最も長い関数が [上位の関数] の一番上に示されます。 [ホット パス] セクションには、ほとんどの時間を使っている関数の呼び出し履歴が表示されます。 これらの一覧は、パフォーマンス上のボトルネックが発生している関数を見つけるのに役立ちます。

関心のある関数をクリックすると、より詳細なビューが表示されます。

使用可能なデータは CPU 使用率ツールと似ていますが、CPU 使用率ではなく、実時間と呼び出し数に基づいている点が異なります。

洞察を分析する

[上位の分析情報] セクションに分析情報が表示される場合は、指定されたリンクを使用して、特定された問題に関する詳細情報を取得します。 詳細については、CPU の分析情報を参照してください。ただし、インストルメンテーション ツールの情報は、CPU 使用率ではなく、実測時間に固有であることに注意してください。

さらに、Copilot を使用している場合は、Copilot に質問する] ボタンを使用して Copilot チャット ウィンドウを開きます。また、Copilot はコードの調査と特定された問題に基づいて提案を提供します。

インストルメンテーションの詳細レポートを分析する

インストルメンテーション レポートを分析するには、[詳細を開く] をクリックするか、上位の関数のいずれかをクリックして [関数] ビューを開きます。

レポートには、利用統計情報のさまざまなビューが示されます。

表示 説明
呼び出し元/呼び出し先 特定の関数、それを呼び出した関数、および呼び出す関数に費やされた時間の詳細ビュー。 パフォーマンス データは、データ収集期間に対して集計されます。 呼び出し元の関数と呼び出された関数を選択して、呼び出しパスを走査できます。
呼び出しツリー 関数呼び出しパスの階層ビュー。 最も時間がかかっている呼び出しパス (ホット パス) を識別するために使用されます。
モジュール データ収集期間にわたって集計された、個々のモジュールで費やされた時間のビュー。 高い呼び出し数やパフォーマンスの問題の組み合わせによってパフォーマンスのボトルネックになる可能性があるモジュールを特定するために使用されます。
関数 個々の関数で費やされた時間を、データ収集期間にわたって集計したビュー。 高い呼び出し数やパフォーマンスの問題の組み合わせによってパフォーマンスのボトルネックになる可能性がある関数を特定するために使用されます。
フレーム グラフ フレーム グラフの視覚化における関数呼び出しパスの階層ビュー。 最も時間がかかっている呼び出しパス (ホット パス) を識別するために使用されます。

呼び出し元/呼び出し先を除くすべてのビューで、診断レポートは合計 [ユニット, %] の高い順に並べ替えられます。 並べ替え順序または並べ替え列を変更するには、列ヘッダーを選択します。 目的の関数をダブルクリックすると、関数のソースと、その関数に費やされた時間を示す強調表示が表示されます。 この表には、関数で費やされた時間 (呼び出された関数 (合計) を含む) や、関数で費やされた時間を示す 2 番目の列 (呼び出された関数 (セルフ) を除く) などのデータを含む列が示されています。

このデータは、関数自体がパフォーマンスのボトルネックであるかどうかを評価するのに役立ちます。 サード パーティのコードまたはランタイム ライブラリがエンドポイントの速度低下やリソース消費量の多い理由であるかどうかを確認するために、メソッドが表示するデータの量を決定します。

フレーム グラフの使用について詳しくは、「フレーム グラフを使用してホット パスを識別する」を参照してください。

インストルメンテーション呼び出しツリー

呼び出しツリーを表示するには、レポートの親ノードを選択します。 既定では、[インストルメンテーション] ページが [呼び出し元/呼び出し先] ビューに表示されます。 [現在のビュー] ドロップダウンで [呼び出しツリー] を選択します。 呼び出しツリー ビューは、パフォーマンスのボトルネックをすばやく特定するのに役立ちます。

[ホット パスの展開] ボタンと [ホット パスの表示] ボタンをクリックすることで、呼び出しツリー ビューで使用する実時間の最も長い関数の呼び出しを表示できます。

呼び出しツリーの構造を示すスクリーンショット。

列の値の詳細を次に示します。

  • [合計] は、関数とその関数によって呼び出された関数に費やされた時間を示します。 高い [合計] の値は、最も多くのクロック時間を消費している関数を指します。

  • [セルフ] は、関数本体で費やされた時間を示します。ただし、関数によって呼び出された関数に費やされた時間は除きます。 [セルフ] の値が高い場合は、関数自体のパフォーマンスのボトルネックを示している可能性があります。

  • [呼び出し回数] は、関数が呼び出された回数を示します。

  • [モジュール] 関数を含むモジュールの名前です。

インストルメンテーション 呼び出しツリーでの非同期呼び出し (.NET)

Visual Studio 2022 バージョン 17.13 Preview 2 以降では、ビジュアル コール ツリーを表すビューが、.NET 非同期呼び出しを、非同期呼び出しが行われた関数の下に入れ子にすることで、一貫したスタック トレース内で実行フローを簡単に追跡できるようにします。 これは、パフォーマンスのボトルネックをすばやく特定するのに役立ちます。

統合スタック トレースは、[概要] ページの コール ツリー ビューと [ホット パス] セクションに表示されます。 非同期ノードは、[Async Call] 記述子と共に表示されます。

非同期呼び出しの呼び出しツリー構造を示すスクリーンショット。

プロファイラーの概要ビューの [フィルター] オプションから [非同期スタックの合成] を選択すると、合成された非同期呼び出し履歴の表示を切り替えることができます。 既定では、この設定は有効になっています。

[非同期スタックの合成] オプションを示すスクリーンショット。