Sdílet prostřednictvím


ICorProfilerInfo3::RequestProfilerDetach – metoda

Dává modulu runtime pokyn, aby odpojil profiler.

Syntaxe

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parametry

dwExpectedCompletionMilliseconds [v] Doba trvání modulu CLR (Common Language Runtime) v milisekundách by měla počkat, než zkontrolujete, jestli je bezpečné uvolnit profiler.

Návratová hodnota

Tato metoda vrátí následující konkrétní HRESULTs a také chyby HRESULT, které označují selhání metody.

HRESULT Popis
S_OK Žádost o odpojení je platná a postup odpojení nyní pokračuje v jiném vlákně. Po úplném dokončení ProfilerDetachSucceeded odpojení se vydá událost.
E_CORPROF_E_CALLBACK3_REQUIRED Profiler selhal pokus IUnknown::QueryInterface pro rozhraní ICorProfilerCallback3 , které musí implementovat pro podporu operace odpojení. Odpojení se nepokoušelo.
CORPROF_E_IMMUTABLE_FLAGS_SET Odpojení není možné, protože profiler při spuštění nastavil neměnné příznaky. Odpojení se nepokoušelo; profiler je stále plně připojený.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT Odpojení není možné, protože profiler používal instrumentovaný kód CIL (Common Intermediate Language) nebo vložené enter/leave háky. Odpojení se nepokoušelo; profiler je stále plně připojený.

Poznámka : Instrumentovaný kód CIL je kód, který poskytuje profiler pomocí SetILFunctionBody metoda.
CORPROF_E_RUNTIME_UNINITIALIZED Modul runtime ještě nebyl inicializován ve spravované aplikaci. (To znamená, že modul runtime nebyl plně načten.) Tento kód chyby může být vrácen při vyžádání odpojení uvnitř ICorProfilerCallback metody ICorProfilerCallback ::Initialize .
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE RequestProfilerDetach byla volána v nepodporované době. K tomu dochází v případě, že metoda je volána ve spravovaném vlákně, ale ne z ICorProfilerCallback metoda nebo z ICorProfilerCallback metoda, která nemůže tolerovat uvolňování paměti. Další informace najdete v tématu CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Poznámky

Během procesu odpojení odpojte vlákno (vlákno vytvořené speciálně pro odpojení profileru) občas kontroluje, zda všechna vlákna ukončila kód profileru. Profiler by měl poskytnout odhad, jak dlouho by tento parametr měl trvat dwExpectedCompletionMilliseconds . Dobrou hodnotou, kterou je vhodné použít, je typická doba, po kterou profiler stráví uvnitř jakékoli dané ICorProfilerCallback* metody. Tato hodnota by neměla být menší než polovina maximální doby, kterou profiler očekává, že stráví.

Vlákno odpojení používá dwExpectedCompletionMilliseconds k rozhodnutí, jak dlouho se má spát před kontrolou, zda byl kód zpětného volání profileru vynechán ze všech zásobníků. I když se podrobnosti o následujícím algoritmu mohou v budoucích verzích MODULU CLR změnit, je možné dwExpectedCompletionMilliseconds ji použít při určování, kdy je bezpečné uvolnit profiler. Detach thread first sleeps for dwExpectedCompletionMilliseconds milisekund. Pokud po probuzení ze spánku CLR zjistí, že kód zpětného volání profileru je stále k dispozici, odpojí vlákno znovu spánku, tentokrát dvakrát dwExpectedCompletionMilliseconds milisekundy. Pokud se po probuzení z tohoto druhého režimu spánku zjistí, že vlákno odpojení zjistí, že kód zpětného volání profileru je stále k dispozici, spí po dobu 10 minut před opětovnou kontrolou. Vlákno odpojení pokračuje v opakování kontroly každých 10 minut.

Pokud profiler určuje dwExpectedCompletionMilliseconds hodnotu 0 (nula), použije CLR výchozí hodnotu 5000, což znamená, že provede kontrolu po 5 sekundách, znovu po 10 sekundách a potom každých 10 minut.

Požadavky

Platformy: Viz požadavky na systém.

Hlavička: CorProf.idl, CorProf.h

Knihovna: CorGuids.lib

Verze rozhraní .NET Framework: Dostupné od verze 4

Viz také