Partager via


ICorProfilerInfo3::RequestProfilerDetach, méthode

Indique au runtime de détacher le profileur.

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

Paramètres

  • dwExpectedCompletionMilliseconds
    [in] Durée, en millisecondes, pendant laquelle le Common Language Runtime (CLR) doit attendre avant de vérifier si le déchargement du profileur peut être exécuté en tout sécurité. (Pour plus d'informations sur ce paramètre, consultez la section Remarques et Attachement au profileur et détachement du profileur.)

Valeur de retour

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

HRESULT

Description

S_OK

La demande de détachement est valide, et la procédure de détachement continue maintenant sur un autre thread. Lorsque l'opération de détachement est terminée, 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 de manière à prendre en charge l'opération de détachement. La tentative de détachement n'a pas été effectuée.

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 été effectuée ; le profileur est toujours entièrement attaché.

CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT

Le détachement est impossible car le profileur a utilisé du code MSIL (Microsoft Intermediate Language) instrumenté ou a inséré des points de raccordement enter/leave. La tentative de détachement n'a pas été effectuée ; le profileur est toujours entièrement attaché.

Remarque   Le code MSIL 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é lorsque le détachement est demandé à l'intérieur de la méthode ICorProfilerCallback::Initialize du rappel de 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 garbage collection. Pour plus d'informations, consultez CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT.

Notes

Pendant la procédure de détachement, le thread de détachement (le 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 donnéeICorProfilerCallback* ; 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 versions ultérieures du CLR, il illustre comment dwExpectedCompletionMilliseconds peut être utilisé pour déterminer si le déchargement du profileur est sûr. Le thread de détachement est d'abord en veille pendant dwExpectedCompletionMilliseconds millisecondes. Si, après avoir quitté l'état de veille, le CLR trouve que le code de rappel du profileur est encore présent, le thread de détachement repasse en état de veille pendant deux fois dwExpectedCompletionMilliseconds millisecondes. Si, après avoir quitté ce deuxième état de veille, le thread de détachement trouve que le code de rappel du profileur est encore présent, il repasse en état de veille pendant 10 minutes avant de vérifier encore. Le thread de détachement continue à revérifier toutes les 10 minutes.

Si le profileur spécifie la valeur 0 pour dwExpectedCompletionMilliseconds, le CLR utilise la valeur par défaut 5000, qui signifie qu'il exécutera une vérification après 5 secondes, de nouveau après 10 secondes, puis toutes les 10 minutes.

Pour plus d'informations sur la façon de détacher un générateur de profils, consultez Attachement au profileur et détachement du profileur

Configuration requise

Plateformes : consultez Configuration requise du .NET Framework.

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

Bibliothèque : CorGuids.lib

Versions du .NET Framework : 4

Voir aussi

Référence

ICorProfilerInfo3, interface

Concepts

Attachement au profileur et détachement du profileur

Autres ressources

Interfaces de profilage

Profilage (Référence des API non managées)