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