ICorProfilerInfo2::GetGenerationBounds 方法
取得記憶體區域,也就是堆積的區段,會組成各種記憶體回收層代。
語法
HRESULT GetGenerationBounds(
[in] ULONG cObjectRanges,
[out] ULONG *pcObjectRanges,
[out, size_is(cObjectRanges), length_is(*pcObjectRanges)] COR_PRF_GC_GENERATION_RANGE ranges[]);
參數
cObjectRanges
[in] 對於 ranges
陣列,呼叫端所配置的項目數目 。
pcObjectRanges
[out] 指定範圍總數的整數指標,其中某些或全部都將在 ranges
陣列傳回。
ranges
[out] COR_PRF_GC_GENERATION_RANGE 結構的陣列。每個結構均說明正在進行記憶體回收之世代中的記憶體範圍 (亦即區塊)。
備註
GetGenerationBounds
方法可以從任何分析工具回呼中呼叫,前提是尚未進行記憶體回收。
多數層代移位發生在記憶體回收期間。 層代可能會在回收之間成長,但通常不會移動。 因此,呼叫 GetGenerationBounds
最有趣的地方位於 ICorProfilerCallback2::GarbageCollectionStarted
和 ICorProfilerCallback2::GarbageCollectionFinished
。
在程式啟動期間,某些物件會由 Common Language Runtime (CLR) 本身所配置,通常在層代 3 和 0 中。 因此,Managed 程式碼開始執行時,這些層代將已包含物件。 除了由記憶體回收行程所產生的 Dummy 物件之外,層代 1 和 2 通常是空的。 (在 CLR 的 32 位元實作中,虛擬物件的大小為 12 個位元組,在 64位元實作中較大。) 您可能也會看到模組 (由原生映像產生器 (NGen.exe) 製造) 中的第 2 代範圍。 在這個情況下,第 2 代中的物件是凍結物件,此物件會在 NGen.exe 執行時配置,而非由記憶體回收行程配置。
這個函式會使用呼叫端配置的緩衝區。
規格需求
平台:請參閱系統需求。
標頭: CorProf.idl、CorProf.h
程式庫:CorGuids.lib
.NET Framework版本:自 2.0 起提供