Methode ICorProfilerInfo3::RequestProfilerDetach
Hiermee wordt de runtime geïnstrueerd om de profiler los te koppelen.
Syntaxis
HRESULT RequestProfilerDetach(
[in] DWORD dwExpectedCompletionMilliseconds);
Parameters
dwExpectedCompletionMilliseconds
[in] De tijdsduur, in milliseconden, moet de COMMON Language Runtime (CLR) wachten voordat wordt gecontroleerd of de profiler veilig kan worden geladen.
Retourwaarde
Deze methode retourneert de volgende specifieke HRESULT's, evenals HRESULT-fouten die duiden op een fout in de methode.
HRESULT | Beschrijving |
---|---|
S_OK | De loskoppelaanvraag is geldig en de loskoppelprocedure wordt nu voortgezet op een andere thread. Wanneer de loskoppeling volledig is voltooid, wordt er een ProfilerDetachSucceeded gebeurtenis uitgegeven. |
E_CORPROF_E_CALLBACK3_REQUIRED | De profiler heeft een IUnknown::QueryInterface-poging voor de ICorProfilerCallback3-interface , die moet worden geïmplementeerd om de loskoppelbewerking te ondersteunen, mislukt. Loskoppelen is niet geprobeerd. |
CORPROF_E_IMMUTABLE_FLAGS_SET | Loskoppelen is onmogelijk omdat de profiler onveranderbare vlaggen bij het opstarten instelt. Loskoppelen is niet geprobeerd; de profiler is nog steeds volledig gekoppeld. |
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT | Loskoppelen is onmogelijk omdat de profiler ge instrumenteerde CIL-code (Common Intermediate Language) of ingevoegde enter /leave haken gebruikt. Loskoppelen is niet geprobeerd; de profiler is nog steeds volledig gekoppeld.Opmerking Instrumented CIL is code die wordt geleverd door de profiler met behulp van de methode SetILFunctionBody . |
CORPROF_E_RUNTIME_UNINITIALIZED | De runtime is nog niet geïnitialiseerd in de beheerde toepassing. (Dat wil gezegd, de runtime is niet volledig geladen.) Deze foutcode kan worden geretourneerd wanneer loskoppeling wordt aangevraagd in de methode ICorProfilerCallback van de profiler ::Initialize . |
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE | RequestProfilerDetach werd op een niet-ondersteund tijdstip aangeroepen. Dit gebeurt als de methode wordt aangeroepen op een beheerde thread, maar niet vanuit een ICorProfilerCallback-methode of vanuit een ICorProfilerCallback-methode die geen garbagecollection tolereert. Zie CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT voor meer informatie. |
Opmerkingen
Tijdens de loskoppelprocedure controleert de thread (de thread die specifiek is gemaakt voor het loskoppelen van de profiler) af en toe of alle threads de code van de profiler hebben afgesloten. De profiler moet een schatting geven van hoe lang dit moet duren via de dwExpectedCompletionMilliseconds
parameter. Een goede waarde om te gebruiken is de typische hoeveelheid tijd die de profiler binnen een bepaalde ICorProfilerCallback*
methode besteedt. Deze waarde mag niet minder dan de helft van de maximale tijd zijn die de profiler verwacht te besteden.
De loskoppelthread gebruikt dwExpectedCompletionMilliseconds
om te bepalen hoe lang moet worden geslapen voordat wordt gecontroleerd of de callback-code van profiler uit alle stacks is gehaald. Hoewel de details van het volgende algoritme kunnen veranderen in toekomstige releases van de CLR, wordt er één manier dwExpectedCompletionMilliseconds
weergegeven wanneer wordt bepaald wanneer het veilig is om de profiler te laden. De loskoppeldraad slaapt eerst voor dwExpectedCompletionMilliseconds
milliseconden. Als na het ontwaken uit de slaapstand de CLR vindt dat de callback-code van profiler nog steeds aanwezig is, slaapt de loskoppelthread opnieuw, deze keer gedurende twee milliseconden dwExpectedCompletionMilliseconds
. Als na het ontwaken uit deze tweede slaapstand de loskoppelthread vindt dat de callback-code van profiler nog steeds aanwezig is, slaapt deze 10 minuten voordat u het opnieuw controleert. De loskoppelthread wordt elke 10 minuten opnieuw gecontroleerd.
Als de profiler opgeeft dwExpectedCompletionMilliseconds
als 0 (nul), gebruikt de CLR een standaardwaarde van 5000, wat betekent dat deze na 5 seconden een controle uitvoert, opnieuw na 10 seconden en vervolgens om de 10 minuten daarna.
Vereisten
Platformen: Zie Systeemvereisten.
Koptekst: CorProf.idl, CorProf.h
Bibliotheek: CorGuids.lib
.NET Framework-versies: beschikbaar sinds 4