ICorProfilerCallback::JITCompilationStarted, méthode

Avertit le profileur que le compilateur juste-à-temps (JIT) a commencé à compiler une fonction.

Syntaxe

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 le blocage affecte l’opération du runtime. La valeur est true si le blocage force le runtime à attendre que le thread appelant soit retourné par ce rappel ; sinon, false.

Même si la valeur de true ne nuira pas au runtime, elle peut biaiser les résultats du profilage.

Notes

Il est possible de recevoir plusieurs paires d’appels JITCompilationStarted et ICorProfilerCallback::JITCompilationFinished pour chaque fonction, en raison de la façon 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 de la classe B doit être exécuté. Par conséquent, le runtime effectue une compilation JIT sur le constructeur de la classe B, puis l’exécute. Pendant l’exécution du constructeur, il appelle la méthode A, ce qui entraîne à 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 signalées par des événements de compilation JIT. Si le profileur va remplacer le code CIL (Common Intermediate Language) pour la méthode A en appelant la méthode ICorProfilerInfo ::SetILFunctionBody , il doit le faire pour les deux JITCompilationStarted événements, mais il peut utiliser le même bloc CIL pour les deux.

Les profileurs doivent prendre en charge la séquence de rappels JIT au cas où deux threads effectueraient simultanément des rappels. Par exemple, thread A appelle JITCompilationStarted. Toutefois, avant que le thread A appelle JITCompilationFinished, le thread B appelle ICorProfilerCallback::ExceptionSearchFunctionEnter avec l’ID de fonction obtenue par le rappel JITCompilationStarted du thread A. Il est possible que l’ID de fonction ne soit pas encore valide, car aucun appel à JITCompilationFinished n’a encore été reçu par le profileur. Toutefois, dans un cas comme celui-ci, l’ID de fonction est valide.

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 2.0

Voir aussi