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