次の方法で共有


プロファイラー パフォーマンス収集方法について

このドキュメントでは、Visual Studio パフォーマンス プロファイラー内のツールで使用されるデータ収集方法について説明します。

サンプリング

サンプリングでは、プロファイリング中にアプリケーションによって実行される作業に関する統計データが収集されます。これを出発点として利用することで、アプリケーションを高速化するための領域を見つけることができます。 サンプリング方式では、アプリケーションで実行されている関数についての情報が、指定した間隔で収集されます。 データ収集は、アプリケーションに関する情報を一定の間隔またはサンプリング頻度 (例: ミリ秒ごと) で収集することで行われます。 収集されたデータが分析され、アプリケーションで時間が費やされた場所のモデルが作成されます。 呼び出し時間の正確な測定が必要な場合や、アプリケーションでパフォーマンスの問題を初めて探す場合は、サンプリングを使用できます。

サンプリングでは、呼び出し回数の精度は低くなりますが、プロファイラーのコストは低く、プロファイリング対象のアプリケーションの実行にほとんど影響しません。 サンプリング方式を使用するパフォーマンス プロファイラーのツールには、CPU 使用率ツールが含まれます。

データ収集が完了すると、キャプチャされたデータは CPU 使用率ツールによって分析され、レポートが表示されます。

トレース

トレースは、メソッドの実行頻度に関するより詳細な情報を提供します。 呼び出し回数の正確な測定が必要な場合は、トレースを使用します。 トレースは、収集時のコードのパフォーマンスに大きな影響を与える場合がありますが、サンプリングのオーバーヘッドはわずかです。 また、トレースでは、収集後のデータ表示に時間がかかるため、分析に時間がかかる場合があります。

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

インストルメンテーション プロファイリングでは、プロファイリングの実行中にアプリケーションによって実行された作業に関する詳細データが収集されます。 データ収集は、タイミング情報をキャプチャするコードをバイナリ ファイルに挿入するか、アプリケーションの実行中にコールバック フックを使用して正確なタイミングと呼び出し回数の情報を収集して出力するツールによって実行されます。 サンプリングベースのアプローチに比べて、インストルメンテーション方式ではオーバーヘッドが高くなります。 インストルメンテーションを使用するパフォーマンス プロファイラーのツールには、インストルメンテーション ツールと .NET オブジェクト割り当てツールが含まれます。

サンプリングとインストルメンテーション

サンプリングの価値は、オーバーヘッドが少ないため、運用環境で実行されているアプリケーションを統計的に表す可能性が高いということです。 インストルメンテーション プロファイルの価値は、関数が呼び出された回数に関する正確な呼び出し数を取得できることです。 これにより、通常のサンプリングよりもはるかに詳細な情報が得られ、一部のシナリオにかかる時間にひずみが生じる可能性があります。 たとえば、多くのことを行わないものの、頻繁に呼び出される関数は、実世界のシナリオの場合よりも多く見られます。

インストルメンテーションでは、アプリケーションで選択されたすべての関数呼び出しに注釈が付けられ、インストルメント化されるため、呼び出されたときに呼び出し元に関する情報と共にトレースに追加されます。 サンプリングでは、実行中の現在の呼び出し履歴が CPU から一定の間隔でポーリングされ、各フレームがトレースに追加されます。