Поделиться через


Метод ICorProfilerInfo3::RequestProfilerDetach

Дает среде выполнения команду на отключение профилировщика.

Синтаксис

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Параметры

dwExpectedCompletionMilliseconds[in] Время в миллисекундах среда CLR должна ждать, прежде чем проверка, чтобы узнать, безопасно ли выгрузить профилировщик.

Возвращаемое значение

Этот метод возвращает следующие конкретные результаты HRESULT, а также ошибки HRESULT, которые указывают на сбой метода.

HRESULT Description
S_OK Запрос отсоединения является допустимым, и процедура отсоединения теперь продолжается в другом потоке. После полного выполнения отсоединения выдается событие ProfilerDetachSucceeded.
E_CORPROF_E_CALLBACK3_REQUIRED Профилировщик завершил попытку IUnknown::QueryInterface для интерфейса ICorProfilerCallback3 , который он должен реализовать для поддержки операции отсоединения. Попытка отсоединения не выполнялась.
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 RequestProfilerDetach был вызван в неподдерживаемое время. Это происходит, если метод вызывается в управляемом потоке, но не из метода 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

См. также