Partager via


ICorProfilerInfo3::RequestProfilerDetach, méthode

Indique au runtime de détacher le profileur.

Syntaxe

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Paramètres

dwExpectedCompletionMilliseconds[in] La durée, en millisecondes, du Common Language Runtime (CLR) doit attendre avant de case activée ing pour voir s’il est sûr de décharger le profileur.

Valeur de retour

Cette méthode retourne les HRESULT spécifiques suivants ainsi que les erreurs HRESULT indiquant l'échec de la méthode.

HRESULT Description
S_OK La demande de détachement est valide, et la procédure de détachement se poursuit maintenant sur un autre thread. Une fois le détachement terminé, un événement ProfilerDetachSucceeded est émis.
E_CORPROF_E_CALLBACK3_REQUIRED La tentative IUnknown::QueryInterface du profileur a échoué pour l’interface ICorProfilerCallback3 qu’il doit implémenter pour prendre en charge l’opération de détachement. La tentative de détachement n'a pas eu lieu.
CORPROF_E_IMMUTABLE_FLAGS_SET Le détachement est impossible, car le profileur a défini des indicateurs immuables au démarrage. La tentative de détachement n'a pas eu lieu ; le profileur est toujours entièrement attaché.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT Le détachement est impossible, car le profileur a utilisé du code CIL (Common Intermediate Language) instrumenté ou des enter/leave crochets insérés. La tentative de détachement n'a pas eu lieu ; le profileur est toujours entièrement attaché.

Notez que le code CIL instrumenté est du code fourni par le profileur à l’aide de la méthode SetILFunctionBody .
CORPROF_E_RUNTIME_UNINITIALIZED Le runtime n'a pas encore été initialisé dans l'application managée. (Autrement dit, le runtime n’a pas été entièrement chargé.) Ce code d’erreur peut être retourné quand le détachement est demandé à l’intérieur de la méthode ICorProfilerCallback::Initialize du rappel du profileur.
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE RequestProfilerDetach a été appelée à une heure non prise en charge. Cela se produit si la méthode est appelée sur un thread managé, mais pas à partir d’une méthode ICorProfilerCallback, ou à partir d’une méthode ICorProfilerCallback qui ne peut pas tolérer de nettoyage de la mémoire. Pour plus d’informations, consultez CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Notes

Pendant la procédure de détachement, le thread de détachement (thread créé spécifiquement pour détacher le profileur) vérifie parfois si tous les threads ont quitté le code du profileur. Le profileur doit fournir une estimation de la durée de cette opération via le paramètre dwExpectedCompletionMilliseconds. Une valeur appropriée à utiliser est le temps passé par le profileur dans une méthode ICorProfilerCallback* donnée ; cette valeur ne doit pas être inférieure à la moitié du temps maximal que le profileur prévoit de passer.

Le thread de détachement utilise dwExpectedCompletionMilliseconds pour décider de la durée de la veille avant de vérifier si le code de rappel du profileur a été dépilé. Bien que les détails de l’algorithme suivant puissent changer dans les mises en production ultérieures du CLR, il illustre comment dwExpectedCompletionMilliseconds peut être utilisé pour déterminer si le profileur peut être déchargé en toute sécurité. Le thread de détachement est d'abord en veille pendant dwExpectedCompletionMilliseconds millisecondes. Si, après avoir quitté l’état de veille, le CLR détermine que le code de rappel du profileur est encore présent, le thread de détachement repasse en état de veille, cette fois pendant dwExpectedCompletionMilliseconds millisecondes. Si, après avoir quitté ce deuxième état de veille, le thread de détachement détermine que le code de rappel du profileur est encore présent, il repasse en état de veille pendant 10 minutes avant d'effectuer une nouvelle vérification. Le thread de détachement procède à une revérification toutes les 10 minutes.

Si le profileur affecte à dwExpectedCompletionMilliseconds la valeur 0 (zéro), le CLR utilise une valeur par défaut de 5000, ce qui signifie qu'il effectue une vérification après 5 secondes, une autre après 10 secondes, puis toutes les 10 minutes.

Spécifications

Plateformes : Consultez Configuration requise.

En-tête : CorProf.idl, CorProf.h

Bibliothèque : CorGuids.lib

Versions de .NET Framework : Disponible depuis la version 4

Voir aussi