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 将返回 nullObjectID
。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 起可用