ICorProfilerCallback2::RootReferences2 方法
在發生記憶體回收之後,通知分析工具有關根參考的資訊。 這個方法是 ICorProfilerCallback::RootReferences 方法的擴充。
語法
HRESULT RootReferences2(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID rootRefIds[],
[in, size_is(cRootRefs)] COR_PRF_GC_ROOT_KIND rootKinds[],
[in, size_is(cRootRefs)] COR_PRF_GC_ROOT_FLAGS rootFlags[],
[in, size_is(cRootRefs)] UINT_PTR rootIds[]);
參數
cRootRefs
[in] rootRefIds
、rootKinds
、rootFlags
和 rootIds
陣列中的項目數。
rootRefIds
[in] 物件識別碼的陣列,每個識別碼都會參考靜態物件或堆疊上的物件。 rootKinds
陣列中的項目會提供資訊以供分類 rootRefIds
陣列中的對應項目。
rootKinds
[in] 指出記憶體回收根目錄型別的 COR_PRF_GC_ROOT_KIND 值陣列。
rootFlags
[in] 描述記憶體回收根目錄屬性之 COR_PRF_GC_ROOT_FLAGS 值的陣列。
rootIds
[in] UINT_PTR 值的陣列,這些值會指向包含記憶體回收根目錄相關資訊的整數 (取決於 rootKinds
參數的值)。
如果根目錄的型別是堆疊,則根目錄識別碼適用於包含變數的函式。 如果該根目錄識別碼為 0,則函式是 CLR 內部的未命名函式。 如果根目錄的型別是控制代碼,則根目錄識別碼適用於記憶體回收控制代碼。 若為其他根目錄類型,識別碼是不透明的值,應加以忽略。
備註
rootRefIds
、rootKinds
、rootFlags
和 rootIds
陣列是平行陣列。 也就是說,rootRefIds[i]
、rootKinds[i]
、rootFlags[i]
和 rootIds[i]
全都與相同的根目錄有關。
會同時呼叫 RootReferences
和 RootReferences2
來通知分析工具。 分析工具通常會實作其中一個方法,但不會同時實作這兩種方法,因為傳入 RootReferences2
的資訊是傳入 RootReferences
之資訊的超集。
rootRefIds
中的項目可以是零,這表示對應的根目錄參考是 null,而且不會參考受控堆積上的物件。
RootReferences2
在自行回呼期間所傳回的物件識別碼無效,因為記憶體回收可能正在將物件從舊位址移至新位址。 因此,分析工具不應嘗試在 RootReferences2
呼叫期間檢查物件。 呼叫 ICorProfilerCallback2::GarbageCollectionFinished 時,所有物件都已移至其新位置,因此可以安全地檢查。
規格需求
平台:請參閱系統需求。
標頭: CorProf.idl、CorProf.h
程式庫:CorGuids.lib
.NET Framework版本:自 2.0 起可用