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

Visual Studio 2017 RC の最新のドキュメントの詳細については、Visual Studio 2017 RC ドキュメントをご参照ください。

Visual Studio Profiling Tools .NET メモリの割り当て プロファイル方法は、イベントが発生したときの割り当てで作成されたオブジェクト、または関数の呼び出し 履歴 に関するガベージ コレクションと追加情報で破棄されたオブジェクトのサイズと数に関する情報を収集します。 呼び出し履歴は、プロセッサ上で実行されている関数に関する情報を格納する動的な構造です。

要件

  • Visual Studio Ultimate, Visual Studio Premium, Visual Studio Professional

    メモリ プロファイラーは、プロファイリングされたアプリケーションの .NET Framework オブジェクトの各割り当てが割り当てられるたびに、コンピューター プロセッサに対して割り込みを行います。 オブジェクトの有効期間データも収集する場合は、.NET Framework のガベージ コレクションの実行後に、毎回プロファイラーがコンピューター プロセッサに対して割り込みを行います。 収集されたデータは、プロファイル対象の関数、およびオブジェクトの種類ごとに集計されます。

割り当てデータ

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

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

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

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

有効期間データ

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

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