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