共用方式為


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] 物件 ID 的陣列,每個物件 ID 會參考靜態物件或堆疊上的物件。 rootKinds 陣列中的元素會提供用來區分 rootRefIds 陣列中之對應元素的資訊。

  • rootKinds
    [in] COR_PRF_GC_ROOT_KIND 值的陣列,這些值表示記憶體回收根的型別。

  • rootFlags
    [in] COR_PRF_GC_ROOT_FLAGS 值的陣列,這些值會描述記憶體回收根的屬性。

  • rootIds
    [in] UINT_PTR 值的陣列,視 rootKinds 參數的值而定,這些值會指向包含記憶體回收根之其他資訊的整數。

    如果根的型別為堆疊,則根 ID 代表包含變數的函式。 如果該根 ID 為 0,則對 CLR 而言,函式為內部未命名函式。 如果根型別為控制代碼,則根 ID 代表記憶體回收控制代碼。 如果是其他根型別,則 ID 為不透明值並且應該加以忽略。

備註

rootRefIds、rootKinds、rootFlags 和 rootIds 陣列都是平行陣列。 也就是說,rootRefIds[i]、rootKinds[i]、rootFlags[i] 和rootIds[i] 都具有相同的根。

若要告知分析工具,可呼叫 RootReferencesRootReferences2。 分析工具一般會實作其中一個方法,但非兩者,因為傳入 RootReferences2 的資訊是傳入 RootReferences 的超集。

rootRefIds 中的項目可能為零,這表示對應的根參考為 null,而且不會參考 Managed 堆積上的物件。

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

需求

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