Freigeben über


ICorProfilerInfo3::RequestProfilerDetach-Methode

Weist das Laufzeitmodul an, den Profiler zu trennen.

Syntax

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Parameter

dwExpectedCompletionMilliseconds [in] Die Zeitdauer in Millisekunden sollte die Common Language Runtime (CLR) warten, bevor überprüft wird, ob das Entladen des Profilers sicher ist.

Rückgabewert

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

HRESULT BESCHREIBUNG
S_OK Die Trennungsanforderung ist gültig, und die Trennprozedur wird jetzt für einen anderen Thread fortgesetzt. Wenn die Trennung vollständig abgeschlossen ist, wird ein ProfilerDetachSucceeded-Ereignis ausgegeben.
E_CORPROF_E_CALLBACK3_REQUIRED Beim Profiler ist bei einem IUnknown::QueryInterface-Versuch für die ICorProfilerCallback3-Schnittstelle ein Fehler aufgetreten, die implementiert werden muss, um den Trennvorgang zu unterstützen. Die Trennung wurde nicht ausgeführt.
CORPROF_E_IMMUTABLE_FLAGS_SET Die Trennung ist nicht möglich, da vom Profiler beim Start unveränderliche Flags festgelegt wurden. Die Trennung wurde nicht ausgeführt. Der Profiler ist noch vollständig angefügt.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT Das Trennen ist unmöglich, da der Profiler gängigen CIL-Code (Common Intermediate Language, CIL) oder eingefügte enter/leave Hooks verwendet hat. Die Trennung wurde nicht ausgeführt. Der Profiler ist noch vollständig angefügt.

Hinweis Instrumentierte CIL ist Code, der vom Profiler mithilfe der SetILFunctionBody-Methode bereitgestellt wird.
CORPROF_E_RUNTIME_UNINITIALIZED Die Common Language Runtime wurde in der verwalteten Anwendung noch nicht initialisiert. (Das heißt, die Runtime wurde nicht vollständig geladen.) Dieser Fehlercode kann zurückgegeben werden, wenn die Trennung innerhalb der ICorProfilerCallback::Initialize-Methode des Profilerrückrufs angefordert wurde.
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE RequestProfilerDetach wurde zu einem nicht unterstützten Zeitpunkt aufgerufen. Dieser Fehler tritt auf, wenn die Methode für einen verwalteten Thread, jedoch nicht innerhalb einer ICorProfilerCallback-Methode oder innerhalb einer ICorProfilerCallback-Methode aufgerufen wird, von der die Garbage Collection nicht toleriert werden kann. Weitere Informationen finden Sie unter CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Bemerkungen

Während der Trennprozedur prüft der Trennthread (der speziell zum Trennen des Profilers erstellte Thread) gelegentlich, ob alle Threads den Code des Profilers verlassen haben. Der Profiler sollte über den dwExpectedCompletionMilliseconds-Parameter eine Schätzung zur Dauer dieses Vorgangs bereitstellen. Ein geeigneter Wert ist die typische Zeitspanne, die der Profiler innerhalb einer angegebenen ICorProfilerCallback*-Methode benötigt. Dieser Wert sollte nicht kleiner als die Hälfte der maximalen Zeitspanne sein, die der Profiler für die Durchführung erwartet.

Der Trennthread verwendet dwExpectedCompletionMilliseconds, um zu entscheiden, wie lange er deaktiviert bleibt, bevor die Prüfung erfolgt, ob der Rückrufcode des Profilers von allen Stapeln geholt wurde. Obwohl die Details des folgenden Algorithmus in zukünftigen Releases der Common Language Runtime (CLR) möglicherweise geändert werden, veranschaulichen sie eine Möglichkeit, wie dwExpectedCompletionMilliseconds zur Ermittlung des sicheren Zeitpunkts für das Entladen des Profilers verwendet werden kann. Der Trennthread ist zunächst für dwExpectedCompletionMilliseconds-Millisekunden deaktiviert. Wenn die CLR nach der Aktivierung aus dem Ruhezustand ermittelt, dass der Profilerrückrufcode weiterhin vorhanden ist, wird der Trennthread erneut deaktiviert, aber diesmal für zweimal dwExpectedCompletionMilliseconds Millisekunden. Wenn der Trennthread nach der Aktivierung aus dem zweiten Ruhezustand ermittelt, dass der Profilerrückrufcode weiterhin vorhanden ist, wird der Trennthread für 10 Minuten deaktiviert, bevor eine erneute Prüfung erfolgt. Der Trennthread für die Prüfung alle 10 Minuten erneut aus.

Wenn der Profiler für dwExpectedCompletionMilliseconds den Wert 0 (null) angibt, verwendet die CLR den Standardwert 5000, d. h. sie führt eine Prüfung nach fünf Sekunden aus, während eine erneute Prüfung nach weiteren 10 Sekunden und anschließend alle 10 Minuten ausgeführt wird.

Anforderungen

Plattformen: Informationen finden Sie unter Systemanforderungen.

Header: CorProf.idl, CorProf.h

Bibliothek: CorGuids.lib

.NET Framework-Versionen: Seit Version 4 verfügbar

Siehe auch