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 方法。 也就是說,除了 ICorProfilerCallback2::GarbageCollectionStarted 和 ICorProfilerCallback2::GarbageCollectionFinished 之間發生的回呼外,它可從任何回呼中予以呼叫。
多數層代轉移會在記憶體回收期間發生。 層代可能會在集合之間成長,但通常不會移動。 因此,最適合呼叫 GetGenerationBounds 的位置為 ICorProfilerCallback2::GarbageCollectionStarted 和 ICorProfilerCallback2::GarbageCollectionFinished。
在程式啟動期間,Common Language Runtime (CLR) 本身會配置一些物件 (一般在層代 3 和 0)。 因此,在 Managed 程式碼開始執行之前,這些層代已包含物件。 除了由記憶體回收行程所產生的空物件之外,層代 1 和 2 一般是空白的 (在 32 位元的 CLR 實作中,空物件的大小為 12 位元組,在 64 位元實作中則會更大)。您可能也會發現,層代 2 的範圍位在原生映像產生器 (NGen.exe) 所產生的模組之中。 在此情況下,層代 2 的物件為「凍結物件」(Frozen Object),這些是在 NGen.exe 執行時所配置的,而不是由記憶體回收行程所配置。
這個函式會使用呼叫端配置的緩衝區。 如需詳細資訊,請參閱程式碼剖析 API 方法慣例。
需求
**平台:**請參閱 .NET Framework 系統需求。
**標頭:**CorProf.idl、CorProf.h
**程式庫:**CorGuids.lib
**.NET Framework 版本:**4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0