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] 引用静态对象或堆栈对象的对象 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 为不透明值,应予忽略。

注解

rootRefIdsrootKindsrootFlagsrootIds 数组是并行数组。 也就是说,rootRefIds[i]rootKinds[i]rootFlags[i]rootIds[i] 都与同一个根有关。

同时调用 RootReferencesRootReferences2 以通知探查器。 探查器通常会实现其中一种方法(但不会两者同时实现),这是因为传入 RootReferences2 的信息是传入 RootReferences 的信息的超集。

rootRefIds 中的条目可能为零,这意味着相应的根引用为 NULL,且不引用托管堆上的对象。

RootReferences2 返回的对象 ID 在回调过程中均是无效的,因为垃圾回收可能正处于将对象从旧地址移到新地址的阶段。 因此,探查器不应在 RootReferences2 调用期间尝试检查对象。 调用 ICorProfilerCallback2::GarbageCollectionFinished 时,所有对象已移动到其新位置,可以安全地进行检查。

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:自 2.0 起可用

另请参阅