共用方式為


ICorProfilerCallback2::SurvivingReferences 方法

報告因非壓縮記憶體回收後,物件在堆積中的配置。

HRESULT SurvivingReferences(
    [in] ULONG  cSurvivingObjectIDRanges,
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID
                objectIDRangeStart[] ,
    [in, size_is(cSurvivingObjectIDRanges)] ULONG
                cObjectIDRangeLength[] );

參數

  • cSurvivingObjectIDRanges
    [in] 因非壓縮記憶體回收而未被回收之連續物件的區塊數目。 也就是說,cSurvivingObjectIDRanges 的值是 objectIDRangeStart 和 cObjectIDRangeLength 陣列的大小,這些陣列分別儲存物件各區塊的 ObjectID 和長度。

    SurvivingReferences 的以下兩個引數是平行陣列。 換言之,objectIDRangeStart 和 cObjectIDRangeLength 都是關於連續物件的相同區塊。

  • objectIDRangeStart
    [in] ObjectID 值的陣列,每個值分別是記憶體中某區塊之連續使用中物件的開始位址。

  • cObjectIDRangeLength
    [in] 整數的陣列,每個整數分別是記憶體中未被回收之連續物件區塊的大小。

    對於 objectIDRangeStart 陣列中所參考的每個區塊,都會指定大小。

備註

objectIDRangeStart 和 cObjectIDRangeLength 陣列的元素應如下解譯,以判斷物件是否未被記憶體回收。 假設 ObjectID 值 (ObjectID) 位在下列範圍:

ObjectIDRangeStart[i] <= ObjectID < ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

若為下列範圍中 i 的任何值,則物件尚未被記憶體回收所回收:

0 <= i < cSurvivingObjectIDRanges

非壓縮記憶體回收會回收「無作用」物件佔據的記憶體,但不會壓縮此釋放的空間。 因此,記憶體會返回堆積,但不會移動「使用中」物件。

Common Language Runtime (CLR) 會對非壓縮記憶體回收呼叫 SurvivingReferences。 對於壓縮記憶體回收,則會呼叫 ICorProfilerCallback::MovedReferences。 單一記憶體回收對於某個層代可以是壓縮的,而對於另一個層代則是非壓縮的。 對於任何特定層代上的記憶體回收,分析工具會接收 SurvivingReferences 回呼或 MovedReferences 回呼,但不會同時接收兩者。

在特定記憶體回收期間,由於限定內部緩衝、伺服器記憶體回收時多個執行緒報告和其他原因,可能會接收多個 SurvivingReferences 回呼。 在記憶體回收期間接收多個回呼時,資訊會累加,任何 SurvivingReferences 回呼中報告的所有參考都不會被記憶體回收。

需求

**平台:**請參閱 .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

請參閱

參考

ICorProfilerCallback 介面

ICorProfilerCallback2 介面

概念

分析 API 的物件追蹤