次の方法で共有


プロファイリング ツールにおけるメモリの割り当ておよびオブジェクトの有効期間のデータ値について

Visual Studio プロファイリング ツールでは、.NET のメモリの割り当てをプロファイルする方法として、プロファイル対象アプリケーションで .NET Framework オブジェクトにメモリが割り当てられるたびに、コンピューター プロセッサに対して割り込みを行います。 オブジェクトの有効期間データも収集する場合は、.NET Framework のガベージ コレクションの実行後に、毎回プロファイラーがコンピューター プロセッサに対して割り込みを行います。 プロファイラーは、割り当てで作成されたオブジェクト、またはガベージ コレクションで破棄されたオブジェクトのサイズと数に関する情報に加えて、イベント発生時の関数の呼び出し履歴に関する情報も収集します。 呼び出し履歴は、プロセッサ上で実行されている関数に関する情報を格納する動的な構造です。 収集されたデータは、プロファイル対象の関数、およびオブジェクトの種類ごとに集計されます。

割り当てデータ

メモリ イベントが発生すると、割り当てられたメモリ オブジェクト、または破棄されたメモリ オブジェクトのカウントとサイズがインクリメントされます。

メモリの割り当てイベントが発生すると、プロファイラーは呼び出し履歴の各関数のサンプル カウントをインクリメントします。 データ収集時点では、関数本体の現在コードを実行している呼び出し履歴の関数は 1 つだけです。 履歴内の他の関数は、呼び出し先の関数から制御が戻るまで待機している関数呼び出しの階層構造の親になります。

  • 割り当てイベントが発生すると、プロファイラーは現在命令を実行している関数の排他サンプル カウントをインクリメントします。 排他サンプルは、関数の総 (包括) サンプル数の一部でもあるため、現在アクティブな関数の包括サンプル カウントもインクリメントされます。

  • プロファイラーは、呼び出し履歴にある他のすべての関数の包括サンプル カウントをインクリメントします。

有効期間データ

.NET Framework のガベージ コレクターは、アプリケーションのメモリの割り当ておよび解放を管理します。 ガベージ コレクターのパフォーマンスを最適化するために、マネージ ヒープは 0、1、および 2 の 3 つのジェネレーションに分割されます。 ランタイムのガベージ コレクターは、新しいオブジェクトをジェネレーション 0 に格納します。 ガベージ コレクションでごみではないと判断されたオブジェクトは昇格してジェネレーション 1 とジェネレーション 2 に格納されます。

ガベージ コレクターは、オブジェクトのジェネレーション全体を解放してメモリをクリアします。 プロファイル対象アプリケーションで作成されたオブジェクトの場合、オブジェクトの有効期間ビューにはオブジェクトの数とサイズ、および解放時のジェネレーションが表示されます。