Partager via


ICorProfilerCallback::JITCompilationStarted, méthode

Informe le profileur que le compilateur juste-à-temps (JIT, Just-In-Time) a commencé à compiler une fonction.

HRESULT JITCompilationStarted(
    [in] FunctionID functionId,
    [in] BOOL       fIsSafeToBlock);

Paramètres

  • functionId
    [in] ID de la fonction pour laquelle la compilation démarre.

  • fIsSafeToBlock
    [in] Valeur indiquant au profileur si un blocage affectera le runtime. La valeur est true si, à cause du blocage, le runtime devra attendre que le thread appelant effectue le retour de ce rappel ; sinon, false.

    Bien que la valeur true ne nuise pas au runtime, elle peut fausser les résultats de profilage.

Notes

Il est possible de recevoir plusieurs paires d'appels JITCompilationStarted et ICorProfilerCallback::JITCompilationFinished pour chaque fonction, en raison de la manière dont le runtime gère les constructeurs de classe. Par exemple, le runtime commence la compilation JIT de la méthode A, mais le constructeur de classe pour la classe B doit être exécuté. Par conséquent, le runtime effectue la compilation JIT du constructeur pour la classe B et l'exécute. Pendant l'exécution du constructeur, celui-ci appelle la méthode A, ce qui provoque de nouveau la compilation JIT de la méthode A. Dans ce scénario, la première compilation JIT de la méthode A est arrêtée. Toutefois, les deux tentatives de compilation JIT de la méthode A sont rapportées avec les événements de compilation JIT. Si le profileur doit remplacer le code MSIL (Microsoft Intermediate Language) pour la méthode A en appelant la méthode ICorProfilerInfo::SetILFunctionBody, il doit le faire pour les deux événements JITCompilationStarted, mais il peut utiliser pour ceux-ci le même bloc MSIL.

Les profileurs doivent prendre en charge la séquence de rappels JIT lorsque deux threads effectuent simultanément des rappels. Par exemple, le thread A appelle JITCompilationStarted. Toutefois, avant que le thread A appelle JITCompilationFinished, le thread B appelle ICorProfilerCallback::ExceptionSearchFunctionEnter avec l'ID de fonction du rappel JITCompilationStarted du thread A. Il peut apparaître que l'ID de fonction n'est pas encore valide, car un appel à JITCompilationFinished n'a pas encore été reçu par le profileur. Toutefois, dans ce cas, l'ID de fonction est valide.

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, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Voir aussi

Référence

ICorProfilerCallback, interface

ICorProfilerCallback::JITCompilationFinished, méthode