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