Freigeben über


ICorProfilerInfo3::RequestProfilerDetach-Methode

Weist die Laufzeit an, den Profiler zu trennen.

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parameter

  • dwExpectedCompletionMilliseconds
    [in] Die Zeitspanne in Millisekunden, während derer die Common Language Runtime (CLR) warten soll, bevor überprüft wird, ob der Profiler sicher entladen werden kann. (Weitere Informationen über diesen Parameter finden Sie im Abschnitt Hinweise und unter Anfügen und Trennen des Profilers.)

Rückgabewert

Diese Methode gibt die folgenden spezifischen HRESULTs sowie HRESULT-Fehler für Methodenfehler zurück.

HRESULT

Beschreibungen

S_OK

Die Trennanforderung ist gültig, und die Trennprozedur fährt jetzt in einem anderen Thread fort. Wenn die Trennung vollständig abgeschlossen ist, wird ein ProfilerDetachSucceeded-Ereignis ausgegeben.

E_ CORPROF_E_CALLBACK3_REQUIRED

Die Profiler konnte IUnknown::QueryInterface für die ICorProfilerCallback3-Schnittstelle, die er für die Unterstützung des Trennvorgangs implementieren muss, nicht erfolgreich ausführen. Die Trennung wurde nicht ausgeführt.

CORPROF_E_IMMUTABLE_FLAGS_SET

Die Trennung ist nicht möglich, da der Profiler beim Starten Immutable-Flags festgelegt hat. Es wurde keine Trennung ausgeführt. Der Profiler ist noch vollständig angefügt.

CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT

Die Trennung ist nicht möglich, da der Profiler instrumentierten MSIL (Microsoft Intermediate Language)-Code verwendet hat oder enter/leave-Hooks eingefügt hat. Es wurde keine Trennung ausgeführt. Der Profiler ist noch vollständig angefügt.

Hinweis   Instrumentierte MSIL ist Code, der vom Profiler bereitgestellt wird, der die SetILFunctionBody-Methode verwendet.

CORPROF_E_RUNTIME_UNINITIALIZED

Die Laufzeit wurde noch nicht in der verwalteten Anwendung initialisiert. (Das heißt, die Laufzeit wurde nicht vollständig geladen.) Dieser Fehlercode wird möglicherweise zurückgegeben, wenn eine Trennung in der der ICorProfilerCallback::Initialize-Methode des Profilerrückrufs angefordert wird.

CORPROF_E_UNSUPPORTED_CALL_SEQUENCE

RequestProfilerDetach wurde zu einem nicht unterstützten Zeitpunkt aufgerufen. Dies tritt auf, wenn die Methode für einen verwalteten Thread aufgerufen wird, aber nicht von innerhalb einer ICorProfilerCallback-Methode oder von innerhalb einer ICorProfilerCallback-Methode, die keine Garbage Collection tolerieren kann. Weitere Informationen finden Sie unter CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Hinweise

Während der Trennprozedur, überprüft der Trennthread (der Thread, der ausdrücklich zum Trennen des Profilers erstellt wurde) gelegentlich, ob alle Threads den Code des Profilers beendet haben. Der Profiler sollte mit dem dwExpectedCompletionMilliseconds-Parameter eine näherungsweise Angabe für die Dauer dieses Vorgangs bereitstellen. Ein geeigneter Wert stellt die typische Zeitdauer dar, die sich der Profiler in einer beliebigen angegebenen ICorProfilerCallback*-Methode befindet. Dieser Wert sollte die Hälfte der maximalen Zeitdauer für den Profiler nicht unterschreiten.

Der Trennthread braucht dwExpectedCompletionMilliseconds, um zu entscheiden, wie lang geruht wird, bevor überprüft wird, ob Profilerrückrufcode von allen Stapeln abgerufen wurde. Obwohl die Details des folgenden Algorithmus sich möglicherweise in zukünftigen Versionen der CLR ändern, veranschaulicht er, wie eine Methode dwExpectedCompletionMilliseconds verwendet werden kann, um zu bestimmen, wann der Profiler sicher entladen werden kann. Der Trennthread ruht zuerst für dwExpectedCompletionMilliseconds-Millisekunden. Wenn die CLR nach dem Ende des Ruhezustands feststellt, dass der Profilerrückrufcode immer noch vorhanden ist, wechselt der Trennthread erneut in den Ruhezustand, dieses Mal für zwei mal dwExpectedCompletionMilliseconds Millisekunden. Wenn der Trennthread feststellt, nachdem er aus diesem zweiten Ruhezustand zurückgekehrt ist, dass Profilerrückrufcode immer noch vorhanden ist, wechselt er 10 Minuten lang vor dem erneuten Überprüfen in den Ruhezustand. Der Trennthread wiederholt die Überprüfung alle 10 Minuten.

Wenn der Profiler dwExpectedCompletionMilliseconds als 0 (null) angibt, verwendet die CLR den Standardwert 5000. Dies bedeutet, dass sie nach 5 Sekunden, erneut nach 10 Sekunden und danach alle 10 Minuten eine Überprüfung ausführt.

Weitere Informationen über das Trennen eines Profilers finden Sie unter Anfügen und Trennen des Profilers.

Anforderungen

Plattformen: siehe Systemanforderungen für .NET Framework.

Header: CorProf.idl, CorProf.h

Bibliothek: CorGuids.lib

.NET Framework-Versionen: 4

Siehe auch

Referenz

ICorProfilerInfo3-Schnittstelle

Konzepte

Anfügen und Trennen des Profilers

Weitere Ressourcen

Profilerstellungsschnittstellen

Profilerstellung (Referenz zur nicht verwalteten API)