Visual Studio のプロファイリング機能ツアー

Visual Studio にはさまざまなプロファイリング ツールがあります。各種アプリの多様な問題を診断できます。

[診断ツール] ウィンドウのプロファイリング ツールには、デバッグ セッション中にアクセスできます。 [診断ツール] ウィンドウは、オフにしていない限り自動的に表示されます。 このウィンドウを表示するには、[デバッグ]、[ウィンドウ]、[診断ツールの表示] の順にクリックします。 ウィンドウを開いている状態で、データを収集するツールを選択できます。

診断ツール ウィンドウ

デバッグ中、[診断ツール] ウィンドウを利用し、CPU とメモリの使用状況を分析できます。また、パフォーマンス関連情報を示すイベントを閲覧できます。

診断ツールの概要ビュー

[診断ツール] ウィンドウはアプリをプロファイリングする方法として人気がありますが、アプリの事後分析を行うこともできます。 各種手法の詳細については、「Running Profiling Tools With or Without the Debugger」 (デバッガーを使用して、または使用せずにプロファイリング ツールを実行する) を参照してください。

CPU 使用率の分析

アプリのパフォーマンスを分析するとき、CPU 使用率ツールから始めると効率的です。 アプリが使用している CPU リソースについて理解できます。 CPU 使用率ツールの詳しいチュートリアルについては、「パフォーマンス プロファイリングのビギナーズ ガイド」を参照してください。

診断ツールの [概要] ビューから、[CPU プロファイルの有効化] を選択します (デバッグ セッションに入っている必要があります)。

診断ツールの CPU 使用率を有効にする

このツールを最も効果的に使用するには、コードにブレークポイントを 2 つ設定します。関数の始めと終わりに 1 つずつ設定するか、分析するコードの領域に設定します。 2 つ目のブレークポイントで止まったとき、プロファイリング データを調べます。

CPU 使用率ビューには、関数が実行時間順に一覧表示されます。実行時間が最も長い関数が一番上に表示されます。 パフォーマンス上のボトルネックが発生している関数を見つけるのに役立ちます。

診断ツールの CPU 使用率ビュー

調べたい関数をダブルクリックすると、3 つのウィンドウを持つ詳細な "バタフライ" ビューが表示されます。選択した関数がウィンドウの中央に、呼び出した関数が左に、呼び出された関数が右に表示されます。 関数本体セクションに、呼び出し元の関数と呼び出される関数にかかった時間を除き、関数本体にかかった時間の合計 (と時間のパーセンテージ) が表示されます。 このデータは、関数自体がパフォーマンスのボトルネックであるかどうかを判定するのに役立ちます。

診断ツールの呼び出し元/呼び出し先 "バタフライ" ビュー

メモリ使用量の分析

診断ツール ウィンドウでは、アプリのメモリ使用量を測定することもできます。 たとえば、ヒープのオブジェクトの数とサイズと数を確認できます。 メモリの分析方法の詳細については、「メモリ使用量」を参照してください。

メモリ使用量を分析するには、デバッグ中に少なくとも 1 枚のメモリ スナップショットを取得する必要があります。 多くの場合、メモリを分析する最良の方法は 2 枚のスナップショットを取得することです。疑われるメモリ問題の発生直前に 1 枚、発生直後に 1 枚取得します。 それから、2 枚のスナップショットの違いを表示し、厳密に何が変化しているのか確認します。

診断ツールでスナップショットを取得する

矢印リンクの 1 つを選択すると、ヒープの差分ビューが与えられます (赤い上向き矢印メモリ使用量増加は、オブジェクト数の増加 (左) とヒープ サイズの増加 (右) を示します)。 右のリンクをクリックすると、差異ヒープ ビューが表示されます。ヒープ サイズが多い順でオブジェクトが表示されます。 メモリ問題の厳密な場所の発見に役立ちます。 たとえば、次の図では、ClassHandlersStore オブジェクトで使用されているバイトが 2 枚目のスナップショットで 3,492 バイト増えています。

診断ツールのヒープ差分ビュー

[メモリ使用量] ビューで代わりに左のリンクをクリックすると、ヒープ ビューがオブジェクト数で整理されます。最も増えたオブジェクトが一番上に表示されます ([数の相違] 列で並べ替えられます)。

パフォーマンス イベントを調べる

診断ツールの [イベント] ビューには、デバッグ中に発生したさまざまなイベントが表示されます。ブレークポイントの設定やコードのステップ実行操作などです。 イベントの継続時間などの情報を確認できます (この時間はデバッガーが最後に一時停止したところから、あるいはアプリが開始したところから計測されます)。 たとえば、コードをステップ実行すると (F10、F11)、[イベント] ビューには、前のステップ操作から現在のステップまでのアプリランタイムが表示されます。

診断ツールのイベントビュー

注意

Visual Studio Enterprise をご利用の場合、このタブの [IntelliTrace イベント] も参照してください。

同じイベントがコード エディターにも表示されます。これはパフォーマンスのヒントとして閲覧できます。

プロファイルのパフォーマンスのヒント

UI のパフォーマンスとアクセシビリティのイベントを調べる (UWP)

UWP アプリで、[診断ツール] ウィンドウで [UI 分析] を有効にできます。 このツールはパフォーマンスとアクセシビリティに関する一般問題を探し出し、デバッグ中に [イベント] ビューに表示します。 イベントの説明に、問題解決に役に立つ情報があります。

診断ツールで UI 分析イベントを表示する

デバッガーなしのプロファイル リリース ビルド

CPU 使用量やメモリ使用量などのプロファイリング ツールはデバッガーと併用できます (前のセクションを参照してください)。あるいは、パフォーマンス プロファイラーを利用してプロファイリング ツールを実行できます。パフォーマンス プロファイラーは、リリース ビルドを分析するためのものです。 パフォーマンス プロファイラーでは、アプリの実行中に診断情報を収集し、アプリの停止後に収集した情報を調査できます。 各種手法の詳細については、「Running Profiling Tools With or Without the Debugger」 (デバッガーを使用して、または使用せずにプロファイリング ツールを実行する) を参照してください。

パフォーマンス プロファイラー

[デバッグ]、[パフォーマンス プロファイラー] の順に選択し、パフォーマンス プロファイラーを開きます。

このウィンドウでは、シナリオによっては、複数のプロファイリング ツールを選択できます。 CPU 使用率などのツールでは、補足データを提供できることがあります。分析に役立てることができます。

リソース消費量を分析する (XAML)

Windows デスクトップ WPF アプリや Windows ストア アプリなど、XAML アプリでは、アプリケーションのタイムライン ツールを利用してリソース消費を分析できます。 たとえば、アプリケーションが UI フレームの準備 (レイアウトとレンダリング) やネットワークとディスクの要求の処理を実行することで、およびアプリケーションの起動、ページの読み込み、ウィンドウのサイズ変更などのシナリオにおいて使用した時間を分析することができます。 ツールを使用するには、パフォーマンス プロファイラーで [アプリケーションのタイムライン] を選択し、[開始] を選択します。 アプリで、リソース消費問題が疑われるシナリオを進め、[コレクションの停止] を選択してレポートを生成します。

ビジュアル スループット でグラフのフレームレートが低い場合は、アプリの実行時に観察されるビジュアルの問題に関連している可能性があります。 同様に、UI スレッド使用状況グラフの数値が高いと、UI の応答性問題に関連している可能性があります。 レポートでは、パフォーマンス問題が疑われる期間を選択し、タイムライン詳細ビュー (下のウィンドウ) で UI スレッド アクティビティを詳しく調査できます。

アプリケーションのタイムラインのプロファイリング ツール

タイムライン詳細ビューでは、アクティビティの種類 (あるいは、関連している UI 要素) などの情報とアクティビティの継続時間を確認できます。 たとえば、この図では、グリッド コントロールのレイアウト イベントに 57.53 ミリ秒かかっています。

詳細については、アプリケーションのタイムラインに関するページを参照してください。

GPU の使用状況を分析する (Direct3D)

Direct3D アプリ (Direct3D コンポーネントは C++ である必要があります) では、GPU 上のアクティビティを調査し、パフォーマンス問題を分析できます。 詳細については、「GPU 使用率」を参照してください。 ツールを使用するには、パフォーマンス プロファイラーで [GPU 使用量] を選択し、[開始] を選択します。 アプリで、プロファイリングしたいシナリオを実行し、[コレクションの停止] を選択してレポートを生成します。

グラフで期間を選択し、[詳細の表示] を選択すると、下のウィンドウに詳細ビューが表示されます。 詳細ビューで、CPU と GPU でそれぞれ、どの程度のアクティビティが行われているのか調査できます。 一番下のウィンドウでイベントを選択すると、タイムラインにポップアップ表示されます。 たとえば、Present イベントを選択すると、Present 呼び出しポップアップが表示されます。 (薄い灰色の垂直同期線を参照すると、特定の Present 呼び出しで垂直同期に失敗しているかどうかを理解できます。 アプリが安定的に 60 FPS をヒットするには、2 つの垂直同期の間に Present が 1 つ存在する必要があります。)

GPU 使用率プロファイリング ツール

また、グラフを利用し、CPU バインドまたは GPU バインドのパフォーマンス問題があるかどうかを判断できます。

パフォーマンスの分析 (JavaScript)

Windows ユニバーサル HTML アプリの場合、JavaScript メモリ ツールと HTML UI 応答性ツールを利用できます。

JavaScript メモリ ツールは、その他の種類のアプリで使用できるメモリ使用量ツールに似ています。 このツールを利用してメモリ使用量を理解し、アプリのメモリ リークを発見できます。 このツールの詳細については、「JavaScript メモリ」を参照してください。

JavaScript メモリのプロファイリング ツール

UI の応答性、遅い読み込み時間、Windows ユニバーサル HTML アプリの遅い表示更新を診断するには、HTML UI 応答性ツールを使用します。 使用方法は、他の種類のアプリのアプリケーションのタイムライン ツールに似ています。 詳細については、「HTML UI の応答性」を参照してください。

HTML UI の応答性プロファイリング ツール

ネットワーク使用量を分析する (UWP)

UWP アプリでは、Windows.Web.Http API を利用して実行されたネットワーク操作を分析できます。このツールは、アクセスと認証の問題、キャッシュの不適切な利用、ディスプレイとダウンロードの低いパフォーマンスなどの問題の解決に役に立つことがあります。 ツールを使用するには、パフォーマンス プロファイラーで [ネットワーク] を選択し、[開始] を選択します。 アプリで、Windows.Web.Http を使用するシナリオを実行し、[コレクションの停止] を選択してレポートを生成します。

ネットワーク使用率プロファイリング ツール

概要ビューで操作を選択すると、詳細が表示されます。

ネットワーク使用率ツールの詳細情報

詳細については、「ネットワーク使用率」を参照してください。

パフォーマンス分析 (レガシー ツール)

CPU 使用量ツールやメモリ使用量ツールに現在入っていないインストルメンテーションのような機能が必要なとき、デスクトップまたは ASP.NET アプリを実行している場合、プロファイリングにパフォーマンス エクスプローラーを利用できます。 (UWP アプリではサポートされていません。) 詳細については、「パフォーマンス エクスプローラー」を参照してください。

パフォーマンス エクスプローラー ツール

使用するツール

次の表では、Visual Studio のさまざまなツールとそれらを使用できる各種プロジェクトをまとめています。

パフォーマンス ツール Windows デスクトップ Windows ユニバーサル/ストア ASP.NET/ASP.NET Core
メモリ使用量
CPU 使用率
GPU 使用率 no
アプリケーションのタイムライン no
パフォーマンスのヒント XAML の場合は可、HTML の場合は不可
パフォーマンス エクスプローラー no 可 (ASP.NET Core の場合は no)
IntelliTrace .NET Enterprise のみ .NET Enterprise のみ .NET Enterprise のみ
ネットワーク使用率 no no
HTML UI responsiveness no HTML の場合は可、XAML の場合は不可 no
JavaScript メモリ no HTML の場合は可、XAML の場合は不可 no

関連項目

Visual Studio でのデバッグ