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] rootRefIdsrootKindsrootFlagsrootIds 陣列中的項目數。

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 內部的未命名函式。 如果根目錄的型別是控制代碼,則根目錄識別碼適用於記憶體回收控制代碼。 若為其他根目錄類型,識別碼是不透明的值,應加以忽略。

備註

rootRefIdsrootKindsrootFlagsrootIds 陣列是平行陣列。 也就是說,rootRefIds[i]rootKinds[i]rootFlags[i]rootIds[i] 全都與相同的根目錄有關。

會同時呼叫 RootReferencesRootReferences2 來通知分析工具。 分析工具通常會實作其中一個方法,但不會同時實作這兩種方法,因為傳入 RootReferences2 的資訊是傳入 RootReferences 之資訊的超集。

rootRefIds 中的項目可以是零,這表示對應的根目錄參考是 null,而且不會參考受控堆積上的物件。

RootReferences2 在自行回呼期間所傳回的物件識別碼無效,因為記憶體回收可能正在將物件從舊位址移至新位址。 因此,分析工具不應嘗試在 RootReferences2 呼叫期間檢查物件。 呼叫 ICorProfilerCallback2::GarbageCollectionFinished 時,所有物件都已移至其新位置,因此可以安全地檢查。

規格需求

平台:請參閱系統需求

標頭: CorProf.idl、CorProf.h

程式庫:CorGuids.lib

.NET Framework版本:自 2.0 起可用

另請參閱