ICorProfilerInfo13::CreateHandle 方法

创建包装指定对象的句柄。

语法

    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 返回 null ObjectID
  • COR_PRF_HANDLE_TYPE_STRONG:强制对象在垃圾回收中幸存下来,即使没有其他对象引用它。
  • COR_PRF_HANDLE_TYPE_PINNED:与强句柄相同,但也可确保对象在垃圾回收期间保留在内存中的同一地址。

若要确保 object 引用有效,必须从 ICorProfilerCallbackICorProfilerCallback::ObjectAllocated 等方法调用此方法。 无法从 EventPipe 异步侦听器调用 CreateHandle 。 如果在发出事件的时间和收到事件时发生垃圾回收,则通过事件有效负载接收的对象可能已释放或移动到内存中。

不要忘记在不再需要创建句柄后调用 ICorProfilerInfo13::D estroyHandle 。 建议同时分配少于 4096 个句柄,以避免影响垃圾回收器的性能。

要求

平台: 请参阅 .NET 支持的作系统

页眉: CorProf.idl、CorProf.h

.NET 版本: 自 .NET 7.0 起可用

另请参阅