Visual Studio でのアプリケーション パフォーマンスのプロファイリングProfile application performance in Visual Studio

Visual Studio プロファイリング ツールを使用して、アプリケーションでパフォーマンスの問題を分析することができます。You can use Visual Studio profiling tools to analyze performance issues in your application. このガイドでは、診断ツールの [CPU 使用率] タブを使用し、アプリのパフォーマンス データを取得する方法について説明します。This procedure shows how to use CPU Usage tab of the Diagnostics Tools to obtain performance data for your app. 診断ツールは Visual Studio の .NET 開発 (ASP.NET を含む) とネイティブ/C++ 開発で利用できます。The Diagnostics Tools are supported for .NET development in Visual Studio, including ASP.NET, and for native/C++ development.

デバッガーが一時停止すると、CPU 使用率ツールは、アプリケーションで実行されている関数に関する情報を収集します。When the debugger pauses, the CPU Usage tool collects information about the functions that are executing in your application. このツールは、作業を実行していた関数を一覧表示し、サンプリング セッションの特定のセグメントに焦点を当てるために使用できるタイムライン グラフを提供します。The tool lists the functions that were performing work, and provides a timeline graph you can use to focus on specific segments of the sampling session.

診断ハブでは、診断セッションの実行と管理のために他の多くのオプションを提供しています。The Diagnostic hub offers you a lot of other options to run and manage your diagnostics session. CPU 使用率では必要なデータを得ることができない場合、他のプロファイリング ツールが別の種類の情報を提供します。その情報が役に立つ可能性があります。If CPU Usage does not give you the data that you need, the other profiling tools provide different kinds of information that might be helpful to you. 多くの場合、アプリケーションのパフォーマンス上の問題は CPU 以外の何かが原因になります。メモリ、UI のレンダリング、ネットワークの要求時間などです。In many cases, the performance bottleneck of your application may be caused by something other than your CPU, such as memory, rendering UI, or network request time. 診断ハブには、この種のデータを記録し、分析するためのオプションが他にもいろいろあります。The Diagnostics hub offers you a lot of other options to record and analyze this kind of data.

ビデオのムービー カメラ アイコンmovie camera icon for video CPU 使用率の分析方法とメモリ使用率の分析方法については、診断ツールの使用に関するこちらのビデオをご覧ください。Watch a video on using the diagnostics tools that shows how to analyze CPU usage and how to analyze memory usage.

この記事では、通常のデバッグ ワークフローで CPU 使用率を分析する方法について説明します。In this article, we'll discuss analyzing CPU usage in your normal debugging workflow. デバッガーをアタッチせずに、または実行中のアプリをターゲットにすることで、CPU 使用率を分析することもできます。詳細については、「デバッガーを使用して、または使用せずにプロファイリング ツールを実行する」の「デバッグなしでプロファイリング データを収集する」をご覧ください。You can also analyze CPU usage without a debugger attached or by targeting a running app - for more information see Collect profiling data without debugging in Run profiling tools with or without the debugger.


.NET Core と ASP.NET Core では現在、CPU 使用率ツールでポータブル PDB による正確な結果を得ることができません。For .NET Core and ASP.NET Core, the CPU Usage tool currently does not provide accurate results with portable PBDs. 代わりにフル PDB を使用してください。Use full PDBs instead.

このチュートリアルでは、次の作業を行います。In this tutorial, you will:

  • CPU 使用率のデータの収集Collect CPU usage data
  • CPU 使用率データの分析Analyze CPU usage data

手順 1: プロファイル データを収集するStep 1: Collect profiling data

  1. Visual Studio でデバッグするプロジェクトを開き、CPU 使用率を調べるポイントでアプリのブレークポイントを設定します。Open the project you want to debug in Visual Studio and set a breakpoint in your app at the point where you want to examine CPU usage.

  2. 分析するコードの関数またはリージョンの終わりに 2 つ目のブレークポイントを設定します。Set a second breakpoint at the end of the function or region of code that you want to analyze.


    2 つのブレークポイントを設定することで、分析するコードの部分にデータ収集を限定できます。By setting two breakpoints, you can limit data collection to the parts of code that you want to analyze.

  3. [診断ツール] ウィンドウは、オフにしていない限り自動的に表示されます。The Diagnostic Tools window appears automatically unless you have turned it off. もう一度ウィンドウを表示するには、[デバッグ] > [ウィンドウ] > [診断ツールの表示] の順にクリックします。To bring up the window again, click Debug / Windows / Show Diagnostic Tools.

  4. ツールバーにある [ツールの選択] の設定で、CPU 使用率メモリ使用率、またはその両方を表示するかどうかを選択できます。You can choose whether to see CPU Usage, Memory Usage, or both, with the Select Tools setting on the toolbar. Visual Studio Enterprise を実行している場合は、[ツール]、[オプション]、[IntelliTrace] で IntelliTrace を有効または無効にすることもできます。If you are running Visual Studio Enterprise, you can also enable or disable IntelliTrace in Tools / Options / IntelliTrace.

    診断ツールを表示するShow Diagnostics Tools

    CPU 使用率を中心に観察します。CPU 使用率が有効になっていることを確認してください (既定では有効になっています)。We will mainly be looking at CPU utilization, so make sure that CPU Usage is enabled (it is enabled by default).

  5. [デバッグ]、[デバッグの開始] の順にクリックします (あるいは、ツール バーの [開始] をクリックするか、F5 を押します)。Click Debug / Start Debugging (or Start on the toolbar, or F5).

    アプリケーションが読み込みを完了すると、診断ツールの概要ビューが表示されます。When the app finishes loading, the Summary view of the Diagnostics Tools appears.

    診断ツールの概要タブDiagnostics Tools Summary Tab

    イベントに関する詳細については、「診断ツール ウィンドウの [イベント検索とフィルター処理] タブ」を参照してください。For more information on the events, see Searching and filtering the Events tab of the Diagnostic Tools window

  6. 最初のブレークポイントにヒットするシナリオを実行します。Run the scenario that will cause your first breakpoint to be hit.

  7. デバッガーが一時停止になっているとき、CPU 使用率データの収集を有効にし、[CPU 使用率] タブを開きます。While the debugger is paused, enable the collection of the CPU Usage data and then open the CPU Usage tab.

    診断ツールの [CPU プロファイルの有効化]Diagnostics Tools Enable CPU Profiling

    [CPU プロファイルの記録] を選択すると、Visual Studio は関数とそれにかかる時間の記録を開始します。When you choose Record CPU Profile, Visual Studio will begin recording your functions and how much time they take to execute. アプリケーションがブレークポイントで停止したとき、この収集されたデータのみを表示できます。You can only view this collected data when your application is halted at a breakpoint.

  8. F5 キーを押すと、アプリケーションが 2 つ目のブレークポイントまで実行されます。Hit F5 to run the app to your second breakpoint.

    これで、2 つのブレークポイント間で実行されるコードのリージョンを対象に、アプリケーションのパフォーマンス データが得られました。Now, you now have performance data for your application specifically for the region of code that runs between the two breakpoints.

  9. CPU タイムラインで、分析対象として関心のあるリージョンを選択します (プロファイル データを表示するリージョンにする必要があります)。Select the region you're interested in analyzing in the CPU timeline (it must be a region that shows profiling data).

    診断ツールで時間のセグメントを選択するDiagnostics Tools Selecting a Time Segment

    プロファイラーがスレッド データの準備を開始します。The profiler begins preparing thread data. それが完了するまで待ちます。Wait for it to finish.

    診断ツールのスレッド準備Diagnostics Tools Preparing Threads

    CPU 使用率ツールの [CPU 使用率] タブにレポートが表示されます。The CPU Usage tool displays the report in the CPU Usage tab.

    診断ツールの [CPU 使用率] タブDiagnostics Tools CPU Usage Tab

    この時点で、データの分析を開始できます。At this point, you can begin to analyze the data.

手順 2: CPU 使用率データを分析するStep 2: Analyze CPU usage data

データの分析では、最初に CPU 使用率で関数の一覧を調べて最も多くの作業を行っている関数を特定し、それから個々の作業を詳しく調べることをお勧めします。We recommend that you begin analyzing your data by examining the list of functions under CPU Usage, identifying the functions that are doing the most work, and then taking a closer look at each one.

  1. 関数の一覧で、最も多くの作業を行っている関数を調べます。In the function list, examine the functions that are doing the most work.

    診断ツールの CPU 使用率の関数一覧Diagnostics Tools CPU Usage Function List


    関数は、最も多くの作業を行っている順に一覧表示されます (呼び出し順ではありません)。Functions are listed in order starting with those doing the most work (they're not in call order). それにより、最も実行時間の長い関数を簡単に特定できます。This helps you quickly identify the longest running functions.

  2. 関数の一覧で、たくさんの作業を行っているアプリケーション関数の 1 つをダブルクリックします。In the function list, double-click one of your app functions that is doing a lot of work.

    関数をダブルクリックすると、左ウィンドウに [呼び出し元/呼び出し先] ビューが開きます。When you double-click a function, the Caller/Callee view opens in the left pane.

    診断ツールの [呼び出し元/呼び出し先] ビューDiagnostics Tools Caller Callee View

    このビューでは、選択した関数が見出しと [現在の関数] ボックスに表示されます (この例では、GetNumber)。In this view, the selected function shows up in the heading and in the Current Function box (GetNumber, in this example). 現在の関数を呼び出した関数が左側の [呼び出し元の関数] に表示されます。現在の関数で呼び出された関数があれば、それは右側の [呼び出される関数] ボックスに表示されます。The function that called the current function is shown on the left under Calling Function, and any functions called by the current function are shown in Called Functions box on the right. (いずれかのボックスを選択し、現在の関数を変更できます。)(You can select either box to change the current function.)

    このビューには、合計時間 (ms) と関数の完了にかかったアプリケーション実行時間全体のパーセンテージが表示されます。This view shows you the total time (ms) and the percentage of the overall app running time that the function has taken to complete. また、関数本体に、呼び出し元の関数と呼び出される関数にかかった時間を除き、関数本体にかかった時間の合計 (と時間のパーセンテージ) が表示されます。Function Body also shows you the total amount of time (and the percentage of time) spent in the function body excluding time spent in calling and called functions. (この例では、3729 ms のうち 3713 ms が関数本体に使用され、残りの 16 ms がこの関数で呼び出された外部コードで使用されています。)(In this example, 3713 out of 3729 ms were spent in the function body, and the remaining 16 ms were spent in external code called by this function).


    関数本体の値が高い場合、関数自体の中でパフォーマンス上のボトルネックとなっている可能性があります。High values in Function Body may indicate a performance bottleneck within the function itself.

  3. 関数の呼び出し順を示す上位レベルのビューを表示する場合、ウィンドウの上部にあるドロップダウンから [コール ツリー] を選択します。If you want to see a higher-level view showing the order in which the functions are called, select Call Tree from the drop-down list at the top of the pane.

    図中の番号は、前に示した各手順に対応しています。Each numbered area in the figure relates to a step in the procedure.

    診断ツールのコール ツリーDiagnostics Tools Call Tree

手順 1Step 1 CPU 使用率コール ツリーのトップ レベルのノードは擬似ノードです。The top-level node in CPU Usage call trees is a pseudo-node
手順 2Step 2 ほとんどのアプリでは、 [外部コードの表示] オプションをオフにすると、セカンド レベルのノードは [外部コード] ノードとなります。このノードに含まれるシステムおよびフレームワーク コードは、アプリの開始と停止、UI の描画、スレッド スケジュールの制御、およびアプリへの他の低レベル サービスの提供を行います。In most apps, when the Show External Code option is disabled, the second-level node is an [External Code] node that contains the system and framework code that starts and stops the app, draws the UI, controls thread scheduling, and provides other low-level services to the app.
手順 3Step 3 セカンド レベル ノードの子はユーザー コード メソッドおよび非同期ルーチンで、セカンド レベル システムとフレームワーク コードによって呼び出される、または作成されます。The children of the second-level node are the user-code methods and asynchronous routines that are called or created by the second-level system and framework code.
手順 4Step 4 メソッドの子ノードには、親メソッドの呼び出しのみのデータが含まれます。Child nodes of a method contain data only for the calls of the parent method. [外部コードの表示] がオフのとき、アプリ メソッドには [外部コード] ノードが含まれる場合もあります。When Show External Code is disabled, app methods can also contain an [External Code] node.

列値の詳細は次のようになります。Here is more information on the column values:

  • [合計 CPU] は、その関数、およびその関数によって呼び出された関数によって実行された作業の量を示します。Total CPU indicates how much work was done by the function and any functions called by it. 合計 CPU 値が高い関数は、全体的に見て最も負荷の高い関数です。High total CPU values point to the functions that are most expensive overall.

  • [セルフ CPU] は、関数本体内のコードによって実行された作業の量を示しますが、その関数から呼び出された関数によって実行された作業は含まれません。Self CPU indicates how much work was done by the code in the function body, excluding the work done by functions that were called by it. セルフ CPU 値が高い部分は、関数自体の中でパフォーマンス上のボトルネックとなっている可能性があります。High Self CPU values may indicate a performance bottleneck within the function itself.

  • モジュール 関数が含まれるモジュールの名前です。あるいは、[外部コード] ノード内の関数が含まれるモジュールの数です。Modules The name of the module containing the function, or the number of modules containing the functions in an [External Code] node.

外部コードの表示View external code

外部コードは、作成したコードによって実行されるシステムおよびフレームワーク コンポーネント内の関数です。External code are functions in system and framework components that are executed by the code you write. 外部コードには、アプリの開始と停止、UI の描画、スレッドの制御、およびアプリへの他の低レベル サービスの提供を行う関数が含まれます。External code include functions that start and stop the app, draw the UI, control threading, and provide other low-level services to the app. 外部コードを確認することはほとんどないため、CPU 使用率ツールはユーザー メソッドの外部関数を 1 つの [外部コード] ノードにまとめます。In most cases, you won't be interested in external code, and so the CPU Usage tool gathers the external functions of a user method into one [External Code] node.

外部コードのコール パスを表示する場合、 [フィルター ビュー] リストから [外部コードの表示] をクリックし、 [適用] をクリックします。If you want to view the call paths of external code, choose Show External Code from the Filter view list and then choose Apply.

[フィルター表示]、[外部コードの表示] の順に選択しますChoose Filter View, then Show External Code

多くの外部コードの呼び出しチェーンは複雑な入れ子になっているため、関数名列の幅は、一部の大型コンピューター モニターを除いてディスプレイの幅に収まりきらない可能性があります。Be aware that many external code call chains are deeply nested, so that the width of the Function Name column can exceed the display width of all but the largest of computer monitors. その場合、関数名は [...] と表示されます。When this happens, function names are shown as [...].

検索ボックスを使って目的のノードを探した後、水平スクロール バーを使ってデータを表示させます。Use the search box to find a node that you are looking for, then use the horizontal scroll bar to bring the data into view.


Windows 関数を呼び出す外部コードをプロファイリングする場合は、最新の .pdb ファイルがあることを確認する必要があります。If you profile external code that calls Windows functions, you should make sure that you have the most current .pdb files. これらのファイルがない場合、レポート ビューに暗号のようなわかりにくい Windows 関数名が一覧表示されます。Without these files, your report views will list Windows function names that are cryptic and difficult to understand. 必要なファイルがあることを確認する方法の詳細については、「Specify symbol (.pdb) and source files in the debugger」 (デバッガーにシンボル (.pdb) とソース ファイルを指定する) を参照してください。For more information about how to make sure that you have the files you need, see Specify symbol (.pdb) and source files in the debugger.

次の手順Next steps

このチュートリアルでは、CPU 使用率のデータを収集し、分析する方法について学習しました。In this tutorial, you've learned how to collect and analyze CPU usage data. プロファイラーのツアーを既に完了している場合、自分のアプリのメモリ使用量を分析する方法を一読しておくことをお勧めします。If you already completed the tour of the profiler, you may want to get a quick look at how to analyze memory usage in your apps.