Udostępnij za pośrednictwem


ICorProfilerInfo3::RequestProfilerDetach — Metoda

Instruuje środowisko uruchomieniowe, aby odłączyło profilera.

Składnia

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parametry

dwExpectedCompletionMilliseconds [in] Czas w milisekundach środowisko uruchomieniowe języka wspólnego (CLR) powinno czekać przed sprawdzeniem, czy profiler jest bezpieczny.

Wartość zwracana

Ta metoda zwraca następujące określone elementy HRESULTs, a także błędy HRESULT wskazujące niepowodzenie metody.

HRESULT opis
S_OK Żądanie odłączenia jest prawidłowe, a procedura odłączania jest teraz kontynuowana w innym wątku. Po pełnym zakończeniu ProfilerDetachSucceeded odłączania jest wystawiane zdarzenie.
E_CORPROF_E_CALLBACK3_REQUIRED Profiler zakończył się niepowodzeniem próby IUnknown::QueryInterface dla interfejsu ICorProfilerCallback3 , który musi zaimplementować w celu obsługi operacji odłączania. Nie podjęto próby odłączenia.
CORPROF_E_IMMUTABLE_FLAGS_SET Odłączanie jest niemożliwe, ponieważ profiler ustawia niezmienne flagi podczas uruchamiania. Nie podjęto próby odłączenia; profiler jest nadal w pełni dołączony.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT Odłączanie jest niemożliwe, ponieważ profiler używał instrumentowanego kodu wspólnego języka pośredniego (CIL) lub wstawionych enter/leave punktów zaczepienia. Nie podjęto próby odłączenia; profiler jest nadal w pełni dołączony.

Uwaga Instrumentowany kod CIL jest kodem dostarczanym przez profilera przy użyciu metody SetILFunctionBody .
CORPROF_E_RUNTIME_UNINITIALIZED Środowisko uruchomieniowe nie zostało jeszcze zainicjowane w aplikacji zarządzanej. (Oznacza to, że środowisko uruchomieniowe nie zostało w pełni załadowane). Ten kod błędu może zostać zwrócony, gdy zażądano odłączenia wewnątrz metody ICorProfilerCallback wywołania zwrotnego profilera::Initialize .
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE RequestProfilerDetach został wywołany w nieobsługiwanym czasie. Dzieje się tak, jeśli metoda jest wywoływana w zarządzanym wątku, ale nie z metody ICorProfilerCallback lub z metody ICorProfilerCallback , która nie może tolerować odzyskiwania pamięci. Aby uzyskać więcej informacji, zobacz CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Uwagi

Podczas procedury odłączania wątek odłączania (wątek utworzony specjalnie do odłączania profilera) od czasu do czasu sprawdza, czy wszystkie wątki zakończyły kod profilera. Profiler powinien dostarczyć oszacowanie, jak długo powinno to potrwać przez dwExpectedCompletionMilliseconds parametr . Dobrą wartością do użycia jest typowa ilość czasu spędzanego przez profilera wewnątrz danej ICorProfilerCallback* metody. Ta wartość nie powinna być mniejsza niż połowa maksymalnego czasu, jaki profiler spodziewa się spędzić.

Wątek odłączania używa dwExpectedCompletionMilliseconds metody , aby zdecydować, jak długo należy spać przed sprawdzeniem, czy kod wywołania zwrotnego profilera został pominięty we wszystkich stosach. Chociaż szczegóły poniższego algorytmu mogą ulec zmianie w przyszłych wersjach środowiska CLR, ilustruje jeden ze sposobów dwExpectedCompletionMilliseconds określania, kiedy można bezpiecznie zwolnić profilera. Wątek odłączania najpierw śpi w dwExpectedCompletionMilliseconds milisekundach. Jeśli po przebudzeniu ze snu CLR wykryje, że kod wywołania zwrotnego profilera jest nadal obecny, odłączanie wątku ponownie śpi, tym razem przez dwa dwExpectedCompletionMilliseconds milisekundy. Jeśli po przebudzeniu z tego drugiego uśpienia, wątek odłączenia wykryje, że kod wywołania zwrotnego profilera jest nadal obecny, spa przez 10 minut przed ponownym sprawdzeniem. Wątek odłączania kontynuuje ponowne sprawdzanie co 10 minut.

Jeśli profiler określa dwExpectedCompletionMilliseconds wartość 0 (zero), clR używa wartości domyślnej 5000, co oznacza, że wykona kontrolę po 5 sekundach, ponownie po 10 sekundach, a następnie co 10 minut później.

Wymagania

Platformy: zobacz Wymagania systemowe.

Nagłówek: CorProf.idl, CorProf.h

Biblioteka: CorGuids.lib

Wersje programu .NET Framework: dostępne od 4

Zobacz też