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