Dela via


ICorProfilerInfo3::RequestProfilerDetach-metod

Instruerar körningen att koppla från profileraren.

Syntax

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parametrar

dwExpectedCompletionMilliseconds [i] I millisekunder bör den gemensamma språkkörningen (CLR) vänta innan du kontrollerar om det är säkert att ta bort profileraren.

Returvärde

Den här metoden returnerar följande specifika HRESULT-fel samt HRESULT-fel som indikerar metodfel.

HRESULT beskrivning
S_OK Begäran om frånkoppling är giltig och avkopplingsproceduren fortsätter nu i en annan tråd. När frånkopplingen är helt klar utfärdas en ProfilerDetachSucceeded händelse.
E_CORPROF_E_CALLBACK3_REQUIRED Profileraren misslyckades med ett IUnknown::QueryInterface-försök för gränssnittet ICorProfilerCallback3 , som den måste implementera för att stödja åtgärden frånkoppling. Det gick inte att koppla från.
CORPROF_E_IMMUTABLE_FLAGS_SET Det går inte att koppla från eftersom profileraren ställer in oföränderliga flaggor vid start. Det gick inte att koppla från. profileraren fortfarande är helt ansluten.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT Det går inte att koppla från eftersom profileraren använde CIL-kod (Common Intermediate Language) eller infogade enter/leave krokar. Det gick inte att koppla från. profileraren fortfarande är helt ansluten.

Obs! Instrumenterad CIL är kod som tillhandahålls av profileraren med metoden SetILFunctionBody .
CORPROF_E_RUNTIME_UNINITIALIZED Körningen har ännu inte initierats i det hanterade programmet. (Det vill: körningen har inte lästs in helt.) Den här felkoden kan returneras när avkoppling begärs i profiler-återanropets ICorProfilerCallback::Initialize-metod .
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE RequestProfilerDetach anropades vid en tidpunkt som inte stöds. Detta inträffar om metoden anropas på en hanterad tråd men inte från en ICorProfilerCallback-metod eller från en ICorProfilerCallback-metod som inte tolererar en skräpinsamling. Mer information finns i CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Kommentarer

Under avkopplingsproceduren kontrollerar den frånkopplade tråden (den tråd som skapats specifikt för att koppla från profileraren) ibland om alla trådar har lämnat profilerarens kod. Profileraren bör ange en uppskattning av hur lång tid detta ska ta genom parametern dwExpectedCompletionMilliseconds . Ett bra värde att använda är den typiska tid som profileraren spenderar inom en viss ICorProfilerCallback* metod. Det här värdet bör inte vara mindre än hälften av den maximala tid som profileraren förväntar sig att spendera.

Den frånkopplade tråden använder dwExpectedCompletionMilliseconds för att bestämma hur länge du ska sova innan du kontrollerar om profilerarens återanropskod har poppats av alla staplar. Även om informationen om följande algoritm kan ändras i framtida versioner av CLR, illustrerar den ett sätt dwExpectedCompletionMilliseconds som kan användas när du fastställer när det är säkert att ta bort profileraren. Den frånkopplade tråden försattes först i dwExpectedCompletionMilliseconds millisekunder. Om CLR efter uppvaknandet från viloläget upptäcker att profilerarens återanropskod fortfarande finns, växlar den frånkopplade tråden igen, den här gången i två gånger dwExpectedCompletionMilliseconds millisekunder. Om den frånkopplade tråden efter uppvaknandet från den här andra vilotiden fortfarande hittar att profileringskod fortfarande finns, ligger den i viloläge i 10 minuter innan den kontrolleras igen. Den frånkopplade tråden fortsätter att kontrolleras var 10:e minut.

Om profileraren dwExpectedCompletionMilliseconds anger som 0 (noll) använder CLR ett standardvärde på 5 000, vilket innebär att den utför en kontroll efter 5 sekunder, igen efter 10 sekunder och sedan var 10:e minut därefter.

Krav

Plattformar: Se Systemkrav.

Rubrik: CorProf.idl, CorProf.h

Bibliotek: CorGuids.lib

.NET Framework-versioner: Finns sedan 4

Se även