ICorProfilerInfo3::RequestProfilerDetach 方法

指示該執行階段中斷與分析工具的連結。

語法

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

參數

dwExpectedCompletionMilliseconds [in]Common Language Runtime (CLR) 應該等候的時間長度,再檢查是否安全卸除分析工具。

傳回值

這個方法會傳回下列特定的 HRESULT,以及表示方法失敗的 HRESULT 錯誤。

HRESULT 描述
S_OK 中斷連結要求有效,而且現在中斷連結程序會在另一個執行緒上繼續。 中斷連結全部完成時,會發生 ProfilerDetachSucceeded 事件。
E_CORPROF_E_CALLBACK3_REQUIRED 分析工具失敗了 ICorProfilerCallback3 介面的 IUnknown::QueryInterface 嘗試,其必須實作以支援卸離作業。 未嘗試中斷連結。
CORPROF_E_IMMUTABLE_FLAGS_SET 因為分析工具在啟動時將旗標設定為不可變,造成無法中斷連結。 未嘗試中斷連結;分析工具仍然完整連結。
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT 中斷連結是不可能的,因為分析工具使用檢測的通用中繼語言 (CIL) 程式代碼,或插入 enter/leave 的攔截。 未嘗試中斷連結;分析工具仍然完整連結。

注意 檢測的 CIL 是程式代碼,是由分析工具使用 SetILFunctionBody 方法所提供的程式代碼。
CORPROF_E_RUNTIME_UNINITIALIZED 在受管理的應用程式中,執行階段尚未初始化。 (也就是說,運行時間尚未完全載入。當分析工具回呼的 ICorProfilerCallback::Initialize 方法內要求卸離時,可能會傳回此錯誤碼。
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT RequestProfilerDetach 在不支援的時間呼叫。 如果在 Managed 線程上呼叫 方法,但不是從 ICorProfilerCallback 方法或無法容許垃圾收集的 ICorProfilerCallback 方法內呼叫方法,就會發生這種情況。 如需詳細資訊,請參閱 CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT

備註

在中斷連結程序中,中斷連結的執行緒 (專為對分析工具中斷連結所建立的執行緒) 偶爾會檢查是否所有執行緒都結束分析工具的程式碼。 分析工具應該透過 dwExpectedCompletionMilliseconds 參數提供所需時間的估計。 要使用的理想值是分析工具花在任何指定的 ICorProfilerCallback* 方法上所需的典型時間量;此值不應小於分析工具預期所需最大時間量的一半。

中斷連結執行緒使用 dwExpectedCompletionMilliseconds 來決定睡眠多久之後,再檢查分析工具回呼程式碼是否已迅速卸離所有堆疊。 雖然下列演算法的詳細資料可能會在未來版本中的 CLR 有所變更,它也說明了一種 dwExpectedCompletionMilliseconds 能夠用來判斷何時可安全卸載分析工具的方式。 中斷連結執行緒先睡眠 dwExpectedCompletionMilliseconds 毫秒。 如果從睡眠喚醒之後,CLR 發現分析工具回呼程式代碼仍然存在,卸離線程會再次進入睡眠狀態,這次會持續兩次 dwExpectedCompletionMilliseconds 毫秒。 從這個第二個睡眠狀態喚醒後,如果卸離執行緒發現分析工具回呼程式碼仍然存在,它會睡眠 10 分鐘後再檢查一次。 中斷連結執行緒會每隔 10 分鐘重新檢查一次。

如果分析工具指定 dwExpectedCompletionMilliseconds 為 0 (零) 時,CLR 會使用預設值為 5000,這表示它會在 5 秒後執行檢查,接著 10 秒後再次檢查,然後之後每隔 10 分鐘一次。

需求

平台:請參閱系統需求

標頭: CorProf.idl、CorProf.h

程式庫:CorGuids.lib

.NET Framework 版本: 自 4 起提供

另請參閱