メモリの割り当ておよびオブジェクトの有効期間のデータ値についてUnderstanding Memory Allocation and Object Lifetime Data Values

Visual StudioVisual Studio プロファイリング ツールの .NET メモリ割り当てのプロファイル方法は、イベントが発生したときの割り当てで作成されたオブジェクトやガベージ コレクションで破棄されたオブジェクトのサイズと数に関する情報と、関数の呼び出し履歴に関する追加情報を収集します。The .NET memory allocation profiling method of Visual StudioVisual Studio Profiling Tools collects information about the size and number of objects that were created in an allocation or destroyed in a garbage collection and additional information about the function call stack when the event occurred. 呼び出し履歴は、プロセッサ上で実行されている関数に関する情報を格納する動的な構造です。A call stack is a dynamic structure that stores information about the functions that are executing on the processor.

RequirementsRequirements

  • Visual Studio UltimateVisual Studio UltimateVisual Studio PremiumVisual Studio PremiumVisual Studio ProfessionalVisual Studio Professional, Visual Studio PremiumVisual Studio Premium, Visual Studio ProfessionalVisual Studio Professional

    メモリ プロファイラーは、プロファイリングされたアプリケーションで .NET Framework オブジェクトの割り当てが行われるたびに、コンピューター プロセッサに対して割り込みを行います。The memory profiler interrupts the computer processor at each allocation of a .NET Framework object in a profiled application. オブジェクトの有効期間データも収集する場合は、.NET Framework のガベージ コレクションの実行後に、毎回プロファイラーがコンピューター プロセッサに対して割り込みを行います。When object lifetime data is also collected, the profiler interrupts the processor after each .NET Framework garbage collection. データは、プロファイル対象の関数、およびオブジェクトの種類ごとに集計されます。The data is aggregated for each profiled function and for each type of object.

割り当てデータAllocation data

メモリ イベントが発生すると、割り当てられたメモリ オブジェクト、または破棄されたメモリ オブジェクトの合計カウントとサイズがインクリメントされます。When a .memory event occurs, the total counts and sizes of the allocated or destroyed memory objects are incremented.

メモリの割り当てイベントが発生すると、プロファイラーは呼び出し履歴の各関数のサンプル カウントをインクリメントします。When a .memory allocation event occurs, the profiler increments the sample counts for each function on the call stack. データ収集時点では、関数本体のコードを現在実行している呼び出し履歴の関数は 1 つだけです。When the data is collected, only one function on the call stack is currently executing the code in its function body. スタック上の他の関数は、関数呼び出し階層内の親であり、呼び出し先の関数が復帰するまで待機しています。The other functions on the stack are parents in the hierarchy of function calls that are waiting for the functions that they called to return.

  • 割り当てイベントが発生すると、プロファイラーは命令を現在実行している関数の排他サンプル数をインクリメントします。For the allocation event, the profiler increments the exclusive sample count of the function that is currently executing its instructions. 排他サンプルは、関数の合計 (包括) サンプル数にも含まれるため、現在アクティブな関数の包括サンプル数もインクリメントされます。Because an exclusive sample is also part of the total (inclusive) samples of the function, the inclusive sample count of the currently active function is also incremented.

  • プロファイラーは、呼び出し履歴上の他のすべての関数の包括サンプル数をインクリメントします。The profiler increments the inclusive sample count of all other functions on the call stack.

有効期間データLifetime data

.NET Framework のガベージ コレクターは、アプリケーションのメモリの割り当ておよび解放を管理します。The garbage collector of the .NET Framework manages the allocation and release of memory for your application. ガベージ コレクターのパフォーマンスを最適化するために、マネージ ヒープは 0、1、および 2 の 3 つのジェネレーションに分割されます。To optimize the performance of the garbage collector, the managed heap is divided into three generations: 0, 1, and 2. ランタイムのガベージ コレクターは、新しいオブジェクトをジェネレーション 0 に格納します。The run-time's garbage collector stores new objects in generation 0. ガベージ コレクションでごみではないと判断されたオブジェクトは昇格してジェネレーション 1 とジェネレーション 2 に格納されます。Objects that survive collections are promoted and stored in generations 1 and 2.

ガベージ コレクターは、オブジェクトのジェネレーション全体の割り当てを解除して、メモリを解放します。The garbage collector reclaims memory by deallocating a whole generation of objects. プロファイル対象アプリケーションで作成されたオブジェクトの場合、オブジェクトの有効期間ビューにはオブジェクトの数とサイズ、および解放時のジェネレーションが表示されます。For objects that the profiled application created, the Object Lifetime view displays the number and size of the objects and the generation when they are reclaimed.