パフォーマンス プロファイリングのビギナーズ ガイド
このトピックの内容は、次の製品に該当します。
Visual Studio Ultimate |
Visual Studio Premium |
Visual Studio Professional |
Visual Studio Express |
---|---|---|---|
ここでは、Visual Studio Premium および Visual Studio Ultimate のプロファイリング ツールを使用して、アプリケーションのパフォーマンス上の問題を分析する基本的な方法について説明します。 プロファイリング ツールには、さまざまな種類のアプリケーションで必要に応じた形式のパフォーマンス データを収集するためのオプションが数多く用意されていますが、ここでは、プロファイリング ウィザードを使用して Visual Studio ソリューションのサンプリング データを収集する方法について説明します。
注意
サンプリングで必要なデータを得ることができない場合は、プロファイリング ツールに用意された他の収集方法を使用して、必要に応じた別の種類の情報を取得できます。 これらの方法の詳細については、「方法 : 収集方法を選択する」を参照してください。
このトピックの内容
基本的な概念
前提条件
手順 1: パフォーマンス セッションの作成と実行
手順 2: サンプリング データの分析
手順 3: コードの修正とセッションの再実行
基本的な概念
パフォーマンス セッション: パフォーマンス プロファイラーを使用すると、パフォーマンス セッションが作成されます。このセッションには、パフォーマンス情報収集の構成データと、1 つ以上のプロファイリング実行の結果が格納されます。 パフォーマンス セッションを作成すると、そのセッションがパフォーマンス エクスプローラーのウィンドウに表示されます。
プロファイリング セッションの名前。
[ターゲット] フォルダーには、セッションでプロファイリングされるプロジェクトまたはバイナリが表示されます。
[レポート] フォルダーには、1 つ以上の収集実行により生成されたプロファイリング データ ファイルが格納されます。 ここでは、ファイル名をクリックしてビューを選択することで、関数呼び出し、メモリの割り当て、特定の関数の詳細情報などのパフォーマンス情報を確認できます。 各ビューは、Visual Studio のメイン ウィンドウ内に表示されます。
サンプリング メソッド: サンプリングは、統計情報を基準としたプロファイリング方式で、アプリケーション内で最も多くのユーザー モード作業を実行している関数を特定できます。 アプリケーションの実行速度を上げるために最適化する必要のある場所を調べるには、まずサンプリングを実行することをお勧めします。
サンプリング方式では、アプリケーションで実行されている関数についての情報が、指定した間隔で収集されます。 プロファイリングの実行が終了すると、Visual Studio のメイン ウィンドウに、プロファイリング データの [概要] ビューが表示されます。 [概要] ビューには、アプリケーションで最も多くの作業が行われている最もアクティブな関数のコール ツリー (ホット パス) が表示されます。また、個別の作業を最も多く実行していた関数の一覧が表示されるほか、タイムライン グラフを使用して、サンプリング セッションの特定のセグメントを集中的に調べることもできます。
前提条件
ここでは、不要な問題の発生を防ぐために、プロファイリングの実行前に行っておくとよい作業をいくつか示します。
管理者として実行する: 使用しているコンピューターの管理者でない場合は、プロファイリング ツールの一部の機能に必要なアクセス許可を得るために、Visual Studio を管理者として実行する必要があります。 これには、[スタート] ボタンをクリックし、Visual Studio のアプリケーション アイコンを右クリックし、[管理者として実行] をクリックします。
アクティブなビルド構成を "リリース" に設定する: デバッグ ビルドでは、アプリケーションに診断コードが追加されるほか、リリース ビルドでコンパイラによって行われる最適化も行われません。 アプリケーションのリリース バージョンをプロファイリングすることで、アプリケーションのより正確なパフォーマンス データを収集できます。 アクティブ構成を変更するには、[ビルド] メニューの [構成マネージャー] をクリックし、ダイアログ ボックスの [アクティブ ソリューション構成] で [リリース] をクリックします。
Windows のシンボル ファイルを入手する: Windows 関数を呼び出すコードをプロファイリングする場合は、最新の .pdb ファイルを入手しておく必要があります。 最新の .pdb ファイルがない場合、レポート ビューに暗号のような Windows 関数名が表示され、内容がわかりにくくなります。 必要なファイルを確認するための方法の詳細については、「方法 : Windows シンボル情報を参照する」を参照してください。
手順 1: パフォーマンス セッションの作成と実行
分析対象のデータを取得するには、まずパフォーマンス セッションを作成して、そのセッションを実行する必要があります。 パフォーマンス ウィザードを使用すると、その両方を実行できます。
パフォーマンス セッションを作成して実行するには
Visual Studio でソリューションを開きます。
[分析] メニューの [パフォーマンス ウィザードの起動] をクリックします。
[CPU サンプリング (推奨)] の既定の設定を変更せずに、[次へ] をクリックします。
既定のプロジェクトを変更せずに、[次へ] をクリックします。
[ウィザードの完了後にプロファイルを起動する] チェック ボックスがオンになっていることを確認して [完了] をクリックします。
アプリケーションが起動し、プロファイラーによるデータの収集が開始されます。
パフォーマンス上の問題が存在する可能性のある機能を実行します。
通常の方法でアプリケーションを終了します。
アプリケーションの実行が終了すると、Visual Studio のメイン ウィンドウにプロファイリング データの [概要] ビューが表示され、パフォーマンス エクスプローラーのウィンドウに新しいセッションのアイコンが表示されます。
手順 2: サンプリング データの分析
パフォーマンス セッションの実行が終了すると、Visual Studio のメイン ウィンドウにプロファイリング レポートの [概要] ビューが表示されます。
ここでは、まずホット パスを調べてから、最も多くの作業を行っている関数の一覧を調べ、最後に [概要] ビューのタイムラインを使用して他の関数を個別に調べることをお勧めします。 また、[エラー一覧] ウィンドウでプロファイリングに関する推奨事項と警告を確認することもできます。
ただし、サンプリング方式で必要な情報を得ることができない場合もあります。 たとえば、サンプルが収集されるのは、アプリケーションがユーザー モードのコードを実行しているときだけです。 このため、入出力処理など一部の機能は、サンプリングではキャプチャされません。 プロファイリング ツールには、重要なデータを個別に分析するための収集方法がいくつか用意されています。 他の方法の詳細については、「方法 : 収集方法を選択する」を参照してください。
図中の番号は、前に示した各手順に対応しています。
サンプリング データを分析するには
[概要] ビューの [ホット パス] には、アプリケーションのコール ツリーのうち、包括サンプルの値が最も高い分岐が表示されます。 これは、データ収集時点で最も頻繁に実行された実行パスです。 包括値が高いということは、そのコール ツリーを生成したアルゴリズムを最適化できる可能性があることを示します。 そのため、パス内の最も下位にあるコード内の関数を調べます。 ただし、パスにはシステム関数や外部モジュールの関数が含まれている場合もあります。
[包括サンプル] は、その関数、およびその関数によって呼び出された関数によって実行された作業の量を示します。 包括カウントが高い関数は、全体的に見て最も負荷の高い関数です。
[排他サンプル] は、関数本体内のコードによって実行された作業の量を示しますが、その関数から呼び出された関数によって実行された作業は含まれません。 排他カウントが高い部分は、関数自体の中でパフォーマンス上のボトルネックとなっている可能性があります。
関数名をクリックして、プロファイリング データの [関数の詳細] ビューを表示します。 [関数の詳細] ビューには、選択した関数のプロファイリング データをグラフィカルに示した図が表示され、その関数を呼び出したすべての関数、および選択した関数によって呼び出されたすべての関数が示されます。
呼び出し元関数および呼び出し先関数のブロックのサイズは、その関数によって行われた呼び出し、またはその関数に対する呼び出しの相対的な頻度を表します。
呼び出し元関数または呼び出し先関数の名前をクリックすると、その関数の詳細情報が [関数の詳細] ビューに表示されます。
[関数の詳細] ウィンドウの下側のペインには、関数のコード本体が表示されます。 コードを調べてパフォーマンスを最適化できる可能性があることがわかった場合は、ソース ファイル名をクリックして、Visual Studio エディターでそのファイルを開きます。
分析を続けるには、[表示] ドロップダウン リストの [概要] をクリックして、[概要] ビューに戻ります。 次に [最も頻繁に個別の作業を実行している関数] の関数を調べます。 この一覧には、排他サンプルの値が最も高い関数が表示されます。 これらの関数の関数本体のコードは、非常に多くの作業を実行していたコードであるため、最適化できる可能性があります。 特定の関数をさらに分析するには、関数名をクリックして、[関数の詳細] ビューで表示します。
プロファイリング実行の調査をさらに続けるには、[概要] ビューのタイムラインを使用して、選択したセグメントから [ホット パス] と [最も頻繁に個別の作業を実行している関数] を表示することにより、プロファイリング データの特定のセグメントを再分析します。 たとえば、タイムラインの比較的小規模なピーク部分を個別に調べることより、プロファイリング実行全体の分析ではわからなかった負荷の高いコール ツリーや関数が明らかになる場合があります。
セグメントを再分析するには、概要ビューのタイムラインのボックス内のセグメントを選択し、[選択項目でフィルター] をクリックします。
プロファイラーでは、プロファイリング実行を改善する方法の提案と、考えられるパフォーマンスの問題の特定を行うために規則のセットも使用します。 問題が見つかった場合は、[エラー一覧] ウィンドウに警告が表示されます。 [エラー一覧] ウィンドウを開くには、[表示] メニューの [エラー一覧] をクリックします。
[関数の詳細] ビューで警告が発生した関数を確認するには、警告をダブルクリックします。
警告に関する詳細を表示するには、エラーを右クリックし、[エラーのヘルプを表示] をクリックします。
手順 3: コードの修正とセッションの再実行
1 つ以上の関数を特定して最適化したら、プロファイリングを再実行してデータを比較することにより、変更によってアプリケーションのパフォーマンスにどのような違いが生じたかを確認できます。
コードを修正してプロファイラーを再実行するには
コードを変更します。
パフォーマンス エクスプローラーを開くには、[表示] メニューの [その他のウィンドウ] をクリックし、[パフォーマンス エクスプローラー] をクリックします。
パフォーマンス エクスプローラーで、再実行するセッションを右クリックし、[プロファイルを使用して起動] をクリックします。
セッションを再実行すると、そのセッションに対応する別のデータ ファイルが、パフォーマンス エクスプローラーの [レポート] フォルダーに追加されます。 前のプロファイリング データと新しいプロファイリング データの両方を選択して右クリックし、[パフォーマンス レポートの比較] をクリックします。
新しいレポート ウィンドウが開き、比較の結果が表示されます。 比較ビューの使用方法の詳細については、「方法 : プロファイラー データ ファイルを比較する」を参照してください。
参照
概念
プロファイリング ツールを使用したアプリケーション パフォーマンスの分析