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 数组。 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 时,所有对象已移动到其新位置,可以安全地进行检查。
要求
平台:请参阅系统要求。
头文件: CorProf.idl、CorProf.h
库:CorGuids.lib
.NET Framework 版本:自 2.0 起可用