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 引用有效,必须从 ICorProfilerCallback 方法(例如 ICorProfilerCallback::ObjectAllocated)调用此方法。 不能从 EventPipe 异步侦听器调用 CreateHandle。 如果在事件发出和接收之间发生垃圾回收,则通过事件有效负载接收的对象可能已在内存中释放或移动。

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

要求

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

头文件: CorProf.idl、CorProf.h

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

另请参阅