创建包装指定对象的句柄。
语法
HRESULT CreateHandle(
[in] ObjectID object,
[in] COR_PRF_HANDLE_TYPE type,
[out] ObjectHandleID* pHandle);
参数
object
[in]要用句柄包装的对象引用。
type
[in]要创建的句柄的类型。
pHandle
[out]调用方提供的指针,指向创建的句柄以包装指定的 object
句柄。
注解
以下是预期使用情况,具体取决于指定的 COR_PRF_HANDLE_TYPE
值:
-
COR_PRF_HANDLE_TYPE_WEAK
:监视对象是否在一段时间内保留在内存中。 如果已收集包装的对象, 则 ICorProfilerInfo13::GetObjectIDFromHandle 返回 nullObjectID
。 -
COR_PRF_HANDLE_TYPE_STRONG
:强制对象在垃圾回收中幸存下来,即使没有其他对象引用它。 -
COR_PRF_HANDLE_TYPE_PINNED
:与强句柄相同,但也可确保对象在垃圾回收期间保留在内存中的同一地址。
若要确保 object
引用有效,必须从 ICorProfilerCallback
ICorProfilerCallback::ObjectAllocated 等方法调用此方法。 无法从 EventPipe 异步侦听器调用 CreateHandle
。 如果在发出事件的时间和收到事件时发生垃圾回收,则通过事件有效负载接收的对象可能已释放或移动到内存中。
不要忘记在不再需要创建句柄后调用 ICorProfilerInfo13::D estroyHandle 。 建议同时分配少于 4096 个句柄,以避免影响垃圾回收器的性能。
要求
平台: 请参阅 .NET 支持的作系统。
页眉: CorProf.idl、CorProf.h
.NET 版本: 自 .NET 7.0 起可用