プロファイル方法について

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

Visual Studio プロファイリング ツールには、パフォーマンス データを収集するための 5 つの方法が用意されています。 ここでは、これらの方法について説明し、特定の方法がデータの収集方法としてどのようなシナリオに適しているのかを示します。

注意

Windows 8 および Windows Server 2012 の強化されたセキュリティ機能によって、Visual Studio プロファイラーがこれらのプラットフォームでデータを収集する方法に大幅な変更が必要になりました。 Windows ストア アプリにも新しい収集手法が必要です。 「Windows 8 および Windows Server 2012 アプリケーションのプロファイリング」を参照してください。

方法 説明
サンプリング アプリケーションが実行する作業についての統計データを収集します。
インストルメンテーション 各関数呼び出しのタイミングに関する詳細情報を取得します。
同時実行 マルチスレッド アプリケーションに関する詳細情報を収集します。
.NET メモリ .NET メモリの割り当ておよびガベージ コレクションに関する詳細情報を収集します。
階層の相互作用 SQL Server データベースに対する ADO.NET の同期の関数呼び出しに関する情報を収集します。

階層相互作用プロファイル データは、Visual Studio Ultimate、Visual Studio Premium、または Visual Studio Professional を使用して収集できます。 ただし、階層相互作用プロファイル データを表示できるのは、Visual Studio Premium および Visual Studio Ultimate のみです。

一部のプロファイル方法では、ソフトウェアおよびハードウェアのパフォーマンス カウンターなど、ここで示した以外の情報も収集できます。 詳細については、「追加のパフォーマンス データの収集」を参照してください。

サンプリング

サンプリング プロファイル方式では、プロファイリング実行中にアプリケーションが実行した作業に関する統計データを収集します。 サンプリング方式は負荷が少ないため、アプリケーション メソッドの実行にほとんど影響しません。

サンプリングは、Visual Studio プロファイリング ツールの既定の方式です。 サンプリング方式は、次のような用途に適しています。

  • アプリケーションのパフォーマンスを初めて調査する場合

  • プロセッサ (CPU) の使用に関連するパフォーマンス上の問題を調査する場合

    サンプリング プロファイル方式では、コンピューター プロセッサを一定の間隔で中断し、関数の呼び出し履歴を収集します。 排他サンプル カウントは、実行中の関数を対象にインクリメントされ、包括カウントは、呼び出し履歴のすべての呼び出し元関数を対象にインクリメントされます。 サンプリング レポートには、プロファイリング対象のモジュール、関数、ソース コード行、および命令について、これらのカウントの合計が表示されます。

    既定では、サンプリング間隔は CPU のサイクル数に設定されます。 ただし、この間隔の種類を別の CPU パフォーマンス カウンターに変更することや、カウンター イベントの回数を間隔として設定することもできます。 また、ADO.NET 経由で行われた SQL Server データベースに対するクエリについての情報を表す階層の相互作用のプロファイル (TIP) データを収集することもできます。

    サンプリングを使用したパフォーマンス統計情報の収集

    サンプリング データ値について

    サンプリング メソッドのデータ ビュー

インストルメンテーション

インストルメンテーション プロファイル方式では、プロファイル対象アプリケーションにおける関数呼び出しのタイミングに関する詳細情報を収集します。 インストルメンテーション プロファイル方式は、次のような用途に適しています。

  • ディスク I\/O などの入出力のボトルネックを調査する場合

  • 特定のモジュールまたは一連の関数について詳細に調査する場合

    インストルメンテーション方式では、インストルメント化対象ファイル内の各関数、およびこれらの関数によって行われた各関数呼び出しのタイミングに関する情報をキャプチャするコードを、バイナリ ファイルに挿入します。 また、この方式では、関数がファイルへの書き込みなどの操作をオペレーティング システムに要求した時間も記録されます。 インストルメンテーション レポートでは、関数またはソース コード行の実行にかかった時間の合計が、次の 4 つの値を使用して表されます。

  • 包括経過: 関数またはソース行の実行にかかった時間の合計。

  • アプリケーション包括: オペレーティング システムに対する呼び出しにかかった時間を除く、関数またはソース行の実行にかかった時間。

  • 排他経過: 関数本体内またはソース コード行内のコードの実行にかかった時間。 関数またはソース行から呼び出された関数の実行にかかった時間は除きます。

  • アプリケーション排他: 関数本体内またはソース コード行内のコードの実行にかかった時間。 オペレーティング システムへの呼び出しにかかった時間、および関数またはソース行から呼び出された関数の実行にかかった時間は除きます。

    インストルメンテーション方式を使用して、CPU およびソフトウェアの両方のパフォーマンス カウンターを収集することもできます。

    インストルメンテーション データ値について

    インストルメンテーションを使用した詳細なタイミング データの収集

    インストルメンテーション メソッドのデータ ビュー

同時実行

同時実行プロファイルでは、マルチスレッド アプリケーションに関する情報が収集されます。 リソース競合プロファイルでは、競合するスレッドによる共有リソースへのアクセスで待機が発生するたびに、詳細な呼び出し履歴情報が収集されます。 また、同時実行の視覚化では、マルチスレッド アプリケーションが、アプリケーション自体、ハードウェア、オペレーティング システム、およびホスト コンピューター上の他のプロセスと対話する方法に関する、より一般的な情報が収集されます。

  • リソース競合レポートには、発生した競合の合計数と、リソースに対する合計待機時間 (待機が発生したモジュール、関数、ソース コード行、命令についての合計待機時間) が表示されます。 また、タイムライン グラフにも発生した競合が表示されます。

  • 同時実行ビジュアライザーでは、パフォーマンスのボトルネック、十分に活用されていない CPU、スレッドの競合、スレッドの移行、同期の遅延、重複 I\/O の領域などを特定するためのグラフィカルな情報が表示されます。 グラフィカルな出力は、呼び出し履歴とソース コードのデータにできる限りリンクされます。 同時実行の視覚化データは、コマンド ラインおよび Windows アプリケーションについてのみ収集できます。

    リソース競合データ値について

    スレッドおよびプロセスの同時実行データの収集

    リソース競合データのビュー

    同時実行ビジュアライザー

.NET メモリ

.NET メモリ割り当てプロファイル方式では、プロファイリング対象アプリケーションで .NET Framework オブジェクトにメモリが割り当てられるたびに、コンピューター プロセッサに対して割り込みを行います。 オブジェクトの有効期間データも収集する場合は、.NET Framework のガベージ コレクションの実行後に、毎回プロファイラーがコンピューター プロセッサに対して割り込みを行います。

プロファイラーは、割り当てで作成されたオブジェクト、またはガベージ コレクションで破棄されたオブジェクトの型、サイズ、および数に関する情報を収集します。

  • メモリの割り当てイベントが発生すると、プロファイラーは関数の呼び出し履歴に関する追加情報を収集します。 排他的割り当てカウントは、現在実行中の関数を対象にインクリメントされ、包括的割り当てカウントは、呼び出し履歴のすべての呼び出し元関数を対象にインクリメントされます。.NET レポートには、プロファイリング対象の型、モジュール、関数、ソース コード行、および命令について、これらのカウントの合計が表示されます。

  • ガベージ コレクションが発生すると、プロファイラーは、破棄されたオブジェクトに関するデータと、ガベージ コレクションの各ジェネレーション内のオブジェクトに関する情報を収集します。 プロファイリング実行の終了時には、明示的に破棄されなかったオブジェクトに関するデータが記録されます。 オブジェクトの有効期間レポートには、プロファイリング実行中にメモリが割り当てられた各型の合計が表示されます。

    .NET メモリのプロファイリングは、サンプリング方式またはインストルメンテーション方式で実行できます。 選択するモードによって、.NET メモリのプロファイリングに固有のメモリ割り当てレポートおよびオブジェクトの有効期間レポートに影響が及ぶことはありません。

  • .NET メモリのプロファイリングをサンプリング モードで実行すると、サンプリング間隔としてメモリ割り当てイベントが使用され、メモリが割り当てられたオブジェクトの数と、割り当てられたメモリの総バイト数が、レポートの包括値および排他値として表示されます。

  • .NET メモリのプロファイリングをインストルメンテーション モードで実行すると、タイミングに関する詳細情報と共に、包括的割り当て値および排他的割り当て値が収集されます。

    メモリの割り当ておよびオブジェクトの有効期間のデータ値について

    .NET メモリの割り当ておよび有効期間データの収集

    .NET メモリのデータ ビュー

階層の相互作用

階層の相互作用のプロファイリングでは、ASP.NET ページまたはその他のアプリケーションと SQL Server データベースとの間で行われた同期的な ADO.NET 呼び出しに関する情報が、プロファイリング データ ファイルに追加されます。 データには、呼び出しの回数と時間、および最長時間と最短時間が含まれます。 階層の相互作用データは、サンプリング、インストルメンテーション、.NET メモリ、または同時実行の各方式で収集されたプロファイリング データに追加できます。

階層相互作用プロファイリング データ
プロファイリング ツールによって収集される階層の相互作用データ

階層相互作用データの収集

階層相互作用のビュー

参照

方法: Web サイトのパフォーマンス データを収集する
パフォーマンス プロファイリングのビギナーズ ガイド