在發生記憶體回收之後,通知分析工具有關根參考的資訊。 這個方法是 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 起可用