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