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 會傳回 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 起提供
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應