更新:2007 年 11 月
通知探查器有关在发生垃圾回收后进行的根引用的信息。此方法是对 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] 都与同一个根有关。
同时调用了 RootReferences 和 RootReferences2 以便通知探查器。探查器通常将只实现其中的一个方法,而不同时实现两者,因为传入 RootReferences2 中的信息是传入 RootReferences 中的信息的超集。
rootRefIds 中的项可以是零,零项表明相应的根引用为 Null,它并不引用托管堆上的对象。
在该回调本身中,由 RootReferences2 返回的对象 ID 无效,因为垃圾回收可能正处于将对象从旧地址移到新地址的过程中。因此,探查器不应在 RootReferences2 调用期间尝试检查对象。当调用 ICorProfilerCallback2::GarbageCollectionFinished 时,所有对象已经移到其新位置并且可以安全地接受检查。
要求
**平台:**请参见 .NET Framework 系统要求。
**头文件:**CorProf.idl
**库:**CorGuids.lib
**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0