プロファイリング ツールにおけるメモリの割り当ておよびオブジェクトの有効期間のデータ値について
ツールのプロファイリングを行う Visual Studio の .NET メモリの割り当て プロファイル メソッドは、イベントが発生したときの割り当てで作成されたオブジェクト、または関数の呼び出し 履歴 に関するガベージ コレクションと追加情報で破棄されたオブジェクトのサイズと数に関する情報を収集します。呼び出し履歴は、プロセッサ上で実行されている関数に関する情報を格納する動的な構造です。
要件
- Visual Studio Ultimate, Visual Studio Premium, Visual Studio Professional
メモリ プロファイラーは、プロファイリング対象アプリケーションで .NET Framework オブジェクトにメモリが割り当てられるたびに、コンピューター プロセッサを中断します。オブジェクトの有効期間データも収集する場合は、.NET Framework のガベージ コレクションの実行後に、毎回プロファイラーがコンピューター プロセッサに対して割り込みを行います。収集されたデータは、プロファイル対象の関数、およびオブジェクトの種類ごとに集計されます。
割り当てデータ
メモリ イベントが発生すると、割り当てられたメモリ オブジェクト、または破棄されたメモリ オブジェクトのカウントとサイズがインクリメントされます。
メモリの割り当てイベントが発生すると、プロファイラーは呼び出し履歴の各関数のサンプル カウントをインクリメントします。データ収集時点では、関数本体の現在コードを実行している呼び出し履歴の関数は 1 つだけです。スタック上の他の関数は、返すために呼び出す関数を待機している関数呼び出し階層の親です。
割り当てイベントが発生すると、プロファイラーは現在命令を実行している関数の排他サンプル カウントをインクリメントします。排他サンプルは、関数の総 (包括) サンプル数の一部でもあるため、現在アクティブな関数の包括サンプル カウントもインクリメントされます。
プロファイラーは、呼び出し履歴にある他のすべての関数の包括サンプル カウントをインクリメントします。
有効期間データ
.NET Framework のガベージ コレクターは、アプリケーションのメモリの割り当ておよび解放を管理します。ガベージ コレクターのパフォーマンスを最適化するために、マネージ ヒープは 0、1、および 2 の 3 つのジェネレーションに分割されます。ランタイムのガベージ コレクターは、新しいオブジェクトをジェネレーション 0 に格納します。ガベージ コレクションでごみではないと判断されたオブジェクトは昇格してジェネレーション 1 とジェネレーション 2 に格納されます。
ガベージ コレクターは、オブジェクトのジェネレーション全体を解放してメモリをクリアします。プロファイル対象アプリケーションで作成されたオブジェクトの場合、オブジェクトの有効期間ビューにはオブジェクトの数とサイズ、および解放時のジェネレーションが表示されます。