共用方式為


ICorProfilerInfo13::CreateHandle method

建立可包裝指定物件的控制代碼。

語法

    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 起提供

另請參閱