Visual Studio パフォーマンス プロファイラー、Windows パフォーマンス ツールキット、PerfView の選択
このガイドでは、Microsoft の主要な汎用パフォーマンス プロファイリング テクノロジ (Visual Studio パフォーマンス プロファイラー、Windows パフォーマンス ツールキット、PerfView) の一般的な比較について説明します。
これらのツールを活用することで、Windows におけるアプリケーションのパフォーマンス特性を効率よく診断、把握することができます。 このガイドの目的は、相互に使用するタイミングの概要を提供し、それぞれの長所を強調し、含まれる機能の概要を簡単に提供することです。
概要
Visual Studio パフォーマンス プロファイラーは、既存の Visual Studio プロジェクト システム内で開発中のアプリケーションのパフォーマンス特性をすばやく把握できるよう、Visual Studio チームによって作成されています。 作業中の開発プロジェクトとの緊密な連携、主要なパフォーマンス シナリオに対する分析の単純化、単一のアプリケーションに的を絞った迅速で簡単なデータ収集がその強みです。
Windows Performance Toolkit は Windows チームによって作成されたもので、PC 全体のシステム ワイドな特性を一度に把握することを目的としています。 ハードウェアとドライバーを分析する必要性から生まれたツールですが、ソフトウェアの問題を把握するうえでもきわめて効果的です。 その強みは、マシン全体から一度に大量の情報を収集できる点です。したがってマルチプロセスの問題や、ハードウェアまたはドライバーの扱いに関する問題、複雑なシナリオが、これらのツールには適しています。
PerfView は、.NET アプリケーションのパフォーマンスを理解するために .NET チームによって作成されます。 Windows パフォーマンス ツールキットと同様に、コンピューター全体から大量の情報を一度に収集できます。 これは、ガベージ コレクション、Just-In-Time コンパイル、マネージド スレッド プールなど、.NET ランタイム サービスに関する非常に詳細な情報を表示する機能によって区別されます。 PerfView は、マネージド、ネイティブ、および混合モードのアプリケーションに使用できます。
これらのツール間に重複があります。 多くの場合、あるツールで問題の調査を開始し、同じシナリオの別のビューに切り替えることができます。 それ以外の場合は、ツールの 1 つが他のツールよりも効果的になります。
インストール
Visual Studio パフォーマンス プロファイラーは、Visual Studio 自体のコンポーネントであるため、Visual Studio 開発環境の他のコンポーネントと同じインストール ウィザードを使用してインストールできます。
Windows Performance Toolkit は、Windows アセスメント & デプロイメント キットの一部として個別にダウンロードできます。 ただし、コマンド ライン パフォーマンス レコーダー ツールは、Windows 10 と Windows 11 にプレインストール wpr.exe
、PowerShell やコマンド プロンプトなどのシェルの既定のパス変数で使用できます。
パフォーマンス アナライザーは、Microsoft Store 内のアプリケーションとして提供されています。
PerfView は、 PerfView GitHub リリース ページでスタンドアロン ダウンロードとして利用できます。 インストールは不要です。
高度なパフォーマンス分析シナリオ向けにカスタマイズする
Windows Performance Toolkit は、高度なパフォーマンス分析シナリオに応える、さらに 2 つの拡張ポイントを備えています。
- Microsoft Performance Toolkit SDK は、トレース データの処理に対応します。また、開発者はこの SDK を使用して独自のプラグインを作成し、Windows Performance Analyzer 内に表示することができます。
- .NET TraceProcessing では、トレース情報を処理して結果のテーブルを得ることのできるカスタム ツールを作成できます。特に大量のトレース データの分析を自動する用途に適しています。
PerfView も同様に、パフォーマンス トレースをプログラムで使用するための .NET TraceEvent ライブラリに基づいています。 TraceEvent は PerfView とは別に使用して、パフォーマンス トレース データのカスタム分析を実行できます。
Note
パフォーマンス分析のシナリオを実現するためには、テスト対象の Windows アプリケーションに関連したシンボルにアクセスする必要があります。 Visual Studio を使用してビルドすると、デバッグ シナリオの設定と同じように、それらがソリューションを使用してビルドされるか、シンボル サーバーから取得されて格納されます。 他のライブラリやコンポーネントを分析するときは、それらのコンポーネントのシンボルを特定して分析を行う必要があります。
ツールの選択に関する考慮事項
選択すべきツールは、調査の対象となるパフォーマンス シナリオによって異なります。 ツール間の機能と特性の比較を次の表に示します。
ヒント
通常は、可能であれば "Visual Studio プロファイリング" を最初に使用してください。 Visual Studio ツールで実行できる制限に達したら、 Windows パフォーマンス ツールキット または PerfView に進みます。
状況 | Visual Studio パフォーマンス プロファイラー | Windows パフォーマンス ツールキット | PerfView |
---|---|---|---|
一般的な使用上の考慮事項 | |||
トレース ファイルのサイズ | ✔️ | 🆗 | 🆗 |
ツールの取得 | ✔️ | ✔️ | ✔️ |
拡張キット | ❌ | ✔️ | ✔️ |
作業スコープに関する考慮事項 | |||
単一のプロセスまたはプロジェクト | ✔️ | 🆗 | 🆗 |
複数のプロセス | ❌ | ✔️ | ✔️ |
ハードウェアに関する考慮事項 | |||
CPU 使用率 | ✔️ | ✔️ | ✔️ |
GPU 使用率 | ✔️ | ✔️ | ❌ |
メモリ使用量 | ✔️ | ✔️ | ✔️ |
デバイス入出力 | ❌ | ✔️ | ✔️ |
消費電力 | ❌ | ✔️ | ❌ |
システム ハンドル | ❌ | ✔️ | ✔️ |
コードの言語サポートに関する考慮事項 | |||
C/C++ のサポート | ✔️ | ✔️ | ✔️ |
.NET のサポート | ✔️ | ✔️ | ✔️ |
JavaScript のサポート | 🆗 | 🆗 | 🆗 |
シナリオに関する考慮事項 | |||
Windows イベント トレーシング | 🆗 | ✔️ | ✔️ |
コンポジション | ❌ | ✔️ | ❌ |
HTML、Edge、Internet Explorer、Web ビュー | ❌ | ✔️ | ❌ |
XAML、WinUI | 🆗 | ✔️ | ✔️ |
オーディオとビデオのパイプラインおよび異常 | ❌ | ✔️ | ❌ |
データベースのタイミング | ✔️ | ❌ | ❌ |
マネージド オブジェクトの割り当てとガベージ コレクション | ✔️ | ❌ | ✔️ |
カスタム シナリオ | ❌ | ✔️ | ✔️ |
キー
- ✔️ サポートが充実: 意図したタスク向けに設計されており、信頼性の高い詳細な結果がアーカイブされます。
- 🆗 サポート: 目的の結果を得るためには、追加の構成や手順が必要となる場合があります。 カテゴリ内のアクションのスコープを限定的に含む場合があります。
- ❌ サポート対象外: この用途向けには設計されていません。
一般的な使用上の考慮事項
パフォーマンス分析を初めて行う方は、既存の Visual Studio 開発スイート内に緊密に統合された機能である Visual Studio パフォーマンス プロファイラーをお勧めします。 必要に応じて、PerfView よりも Visual Studio Performance Profiler を使用することをお勧めします。
もっと強力で多くの機能が要求される複雑なシステム パフォーマンス分析を行う場合は、Windows Performance Toolkit をお勧めします。このツールキットは、パフォーマンス分析タスクの遂行を目的とした 2 つのツールから成ります。
- Windows Performance Recorderトレース セッションの収集を担うツールで、コマンドライン版とグラフィカル インターフェイス版とがあります。
- Windows Performance Analyzer。収集されたデータの後処理を行うために後から起動します。高度にカスタマイズ可能な分析ビューを備えています。
Visual Studio パフォーマンス プロファイラーの利点をいくつか挙げます。
- 主な領域のパフォーマンス分析の導入に適しています。
- プロジェクトの構成に基づいて、分析とデバッグに伴う複雑さの多くが自動的に処理されます。
- 主な関心領域が自動的に強調されます。
- 比較的データ セットが限定され、サイズも小さく、収集スコープも狭い単一のアプリケーションに重点的に取り組む場合に適しています。
- 対象が具体的で限定されていることから、プロファイリング中に伴うマシン ハードウェアや他のアプリケーションへの影響が小さく、また、生成、格納されるトレース ファイルのサイズも少なくて済みます。加えて、収集が完了した後に情報を閲覧する際の処理速度も速くなります。
- Visual Studio パフォーマンス プロファイラーが関知するのはアプリケーションのみであってシステム全体ではないため、レビューとターン アラウンドの処理が速く、トレースを開始して完了するまでの時間が短くて済みます。
- データの収集とその結果の分析はすべて Visual Studio 内で実行され、収集が完了すると自動的に分析ページが起動します。 また、レポート ビューも総じて、自動的にホット スポットや対処の必要な領域に着目するようになっています。
Windows Performance Toolkit の利点をいくつか挙げます。
- Windows のパフォーマンスと診断に携わるチームから豊富なドキュメントとブログが提供されているため、容易に導入できます。
- 特にバックグラウンド タスクの大きな負荷がかかっているシステムから、きわめて大きなファイルを収集する場合に適しています。 情報を選別せずに収集し、後から Windows Performance Analyzer のインターフェイスでフィルタリングすることを目的としたツールです。
- 拡張ポイントを使用してカスタマイズすることにより、高度なパフォーマンス分析シナリオに対応します (後述)。
PerfView で提供される利点には、次のようなものがあります。
- 包括的な 組み込みのドキュメントとインターネットにアクセスできるハウツー ビデオ アプリ内からリンクされます。
- PerfView.exeをコピーするだけで運用環境にデプロイ簡単です。
- 再現困難な問題をキャプチャするための フライト レコーダー モード 。
- .NET ランタイム サービスの非常に詳細な診断。
- カスタム ビュー用に拡張可能です。
作業スコープに関する考慮事項
single アプリケーション特にingle プロセスを取り巻く分析では、すべてのツールでパフォーマンスを収集して理解できます。 ただし、Visual Studio パフォーマンス プロファイラーに分があります。既に利用できるアプリケーション ソースとプロジェクト システムがある場合は特に、このことが当てはまります。 Visual Studio パフォーマンス プロファイラー エンジンは、F5 デバッグ機能と同様の効率的な方法で、CPU、GPU、メモリ情報をバイナリから収集するように設計されています。 この収集メカニズムは、手元の 1 つのアプリケーションにのみ注力する一方で、よりタイトなターン アラウンドと開発者のループを提供します。
Visual Studio に必要な機能がない場合、(運用環境で一般的な) コレクション要件のために実行できない場合、またはより詳細な .NET 診断機能が必要な場合は、PerfView を選択します。
プロセスの境界を越える複数の要求、ハードウェア デバイスとそのドライバー、Windows プラットフォーム テクノロジの奥深い領域を含んだ、より複雑なシナリオでは、Windows Performance Toolkit が最適な選択肢となります。
ハードウェアに関する考慮事項
Visual Studio パフォーマンス プロファイラー、Windows パフォーマンス ツールキット、PerfView では、主要なハードウェア コンポーネントの CPU とメモリを診断できます。Visual Studio Performance Profiler と Windows Performance Toolkit では GPU もサポートされます。 これらのツールは、通常、これらの領域の入門分析で適切に一致します。
CPU 使用率 は 3 つのツールすべてで分析でき、通常はサンプリングを使用してキャプチャされます。 サンプリングによってアプリケーションから定期的にスタック トレースが収集され、その出現頻度についてのランク付けが得られます。 どちらのツールもこの動作を調整し、代わりにインストルメンテーションを使用して、厳密なアカウンティングを行うことができます。
GPU 使用率 は、Visual Studio パフォーマンス プロファイラーと Windows パフォーマンス ツールキットの両方で分析でき、情報の概要をキャプチャできます。
メモリ使用量 は、ヒープ領域とヒープ内の割り当てに関連付けられているスタックに関する情報を収集する 3 つのツールすべてで分析できます。
ネットワーク、ディスク、デバイス、ハンドル、システムの全体的な電源消費など、より複雑なシナリオが発生した場合、Windows Performance Toolkit の方が分析のための装備が充実しています。 要求はオペレーティング システムから各種のハードウェア コンポーネントにディスパッチされるため、このデータは、オペレーティング システムから直接収集するのがベストです。 Windows Performance Toolkit は、オペレーティング システムと並行して開発されているため、よりシステムに着目したカテゴリの情報収集に長けています。
コードの言語サポートに関する考慮事項
Windows Performance Toolkit の言語サポートは、Windows オペレーティング システムのコードベースに使用されている C と C++ が中心となります。
Visual Studio パフォーマンス プロファイラーは、より広いプログラミング言語に対応することを重視しています。.NET を起源とするテクノロジ (C# や ASP.NET など) から始まり、それ以外のテクノロジまで対応範囲が拡大しています。
PerfView では、.NET およびネイティブ (C および C++) アプリケーションがサポートされます。 .NET ランタイムと、ASP.NET Web ワークロードに関する機能に関する深い知識があります。
これは、Visual Studio が C または C++ コードを分析できない、または Windows パフォーマンス アナライザーが .NET アプリケーションを分析できない、または PerfView が Web アプリケーションを分析できないことを示すものではありません。 それぞれのツールの強みを活かすために、分析対象のアプリケーションに最も適したツールをまず使うのがベストである、ということです。
シナリオに関する考慮事項
すべてのツールには、アプリケーションのパフォーマンスを調べるためのシナリオベースのオプションがいくつか含まれています。
Visual Studio パフォーマンス プロファイラーの選択肢は、分析対象となるアプリケーション内に存在する .NET、ユーザー インターフェイス (UI)、データベースが中心となる傾向があります。
これに対し、Windows Performance Toolkit は、リアルタイム処理パイプラインにおける異常や、コンポジション、ブラウザー ビューなど、どちらかと言えばオペレーティング システムのコンポーネントやフレームワークが中心となります。
よりカスタマイズしたソリューションが要求されるシナリオであれば、Windows Performance Recorder を使用することで、システム全体の収集データとアプリケーション関連の収集データの両方を 1 つのレコーディング セッションにまとめることができます。 製品の開発時とは異なるハードウェアからのパフォーマンス データをリクエストする顧客に対しても、この機能があれば、アプリケーション開発者は包括的なソリューションを提供してデプロイできるようになります。 このメカニズムの詳細については、Windows のパフォーマンスと診断に携わるチームによるカスタム プロファイルの作成に関するブログ シリーズをご覧ください。
PerfView は、.NET アプリケーションとランタイムの詳細な調査を対象としていますが、マルチプロセスおよびオペレーティング システム レベルの調査と同じように機能します。
まとめ
Visual Studio Performance Profiler、Windows Performance Toolkit、PerfView は、アプリケーションのパフォーマンスを理解するために Microsoft から入手できる 3 つの堅牢なツールです。 どちらのツールが実際のニーズに合っているかを見極めるためには、個別の事情に関してさまざまな事柄を考慮しなければなりません。 このガイドが、パフォーマンス分析を行う皆さんを正しい選択に導く指針となればさいわいです。皆さまからのフィードバックをお待ちしております。このページの下部からお送りいただけえます。さらに、Windows 開発のパフォーマンスについての問題は、Windows Dev Performance リポジトリからお送りください。
Windows developer