Combinaison de code managé et non managé dans un profileur de code
Mise à jour : novembre 2007
Un profileur incorrectement écrit peut générer des références circulaires vers lui-même, provoquant ainsi un comportement imprévisible.
Une révision de l'API de profilage du CLR peut donner l'impression que vous pouvez écrire un profileur contenant des composants managés et non managés qui s'appellent les uns les autres via COM Interop ou des appels indirects.
Bien que ce soit possible sous un angle de conception, l'API de profilage ne prend pas en charge de composants managés. Un profileur de CLR doit être complètement non managé. Les tentatives visant à combiner code managé et code non managé dans un profileur de CLR peuvent provoquer des violations d'accès, des échecs de programmes ou des blocages. Les composants managés du profileur redéclencheront des événements vers leurs composants non managés, qui appelleraient par la suite les composants managés de nouveau, provoquant ainsi des références circulaires.
Le seul emplacement où un profileur de CLR peut appeler le code managé de manière sécurisée est dans le corps d'une méthode MSIL (Microsoft Intermediate Language). Avant l'achèvement de la compilation juste-à-temps (JIT) d'une fonction, le profileur peut insérer des appels managés dans le corps d'une méthode MSIL, puis la compiler juste-à-temps (consultez la méthode ICorProfilerInfo::GetILFunctionBody ). Cette technique peut être utilisée à bon escient pour l'instrumentation sélective de code managé, ou pour collecter des statistiques et des données de performances à propos du JIT.
Un profileur de code peut également insérer des raccordements natifs dans le corps MSIL de chaque fonction managée qui fait appel à un code non managé. Cette technique peut être utilisée pour l'instrumentation et la couverture. Par exemple, un profileur de code pourrait insérer des raccordements d'instrumentation après chaque bloc MSIL afin de garantir l'exécution du bloc. Le changement du corps MSIL d'une méthode est une opération très délicate, et il existe de nombreux facteurs à prendre en considération.