Ceci est similaire dans l'esprit à ICorProfilerCallback::JITCompilationStarted
lorsqu'il est associé à ICorProfilerInfo::SetILFunctionBody
, mais avec plus de contraintes. Les classes ICorProfiler*
peuvent être utilisées pour faire de l'instrumentation d'exécution pour presque toutes les méthodes gérées. Il existe des profileurs et des débogueurs qui les utilisent pour collecter des informations sur un processus en cours d'exécution.
Vous pouvez utiliser MethodRental
pour coder l'instrument à des fins de diagnostic. Quelques exemples:
- La fonction entrée/sortie vous donnerait une trace d'exécution que vous pourriez utiliser pour dériver des données de profilage.
- Les primitives de synchronisation d'instrumentation peuvent vous aider à diagnostiquer les conditions de course. L'instrumentation des blocs de base peut vous aider à déterminer la couverture de code.
Vous pouvez également utiliser MethodRental
pour améliorer la fonctionnalité du code existant. Aspect-oriented programming vient à l'esprit. Vous pourriez «tisser» dans la sécurité, la journalisation ou d'autres préoccupations de conception transversales dans le code existant. Cela nécessiterait une autre installation (XML, une bibliothèque C#) pour exprimer vos aspects, cependant. Enfin, vous pouvez utiliser MethodRental
pour "détourner" le code existant, c'est-à-dire pour intercepter les appels de méthode afin de créer un type de polymorphisme d'exécution. Par exemple, si vous avez du code client qui utilise une classe RegistryStore
générée dynamiquement pour obtenir une configuration via GetConfig
, vous pouvez réécrire la méthode IL pour modifier l'implémentation de RegistryStore.GetConfig
pour utiliser le système de fichiers à la place. Vous pouvez le faire sans avoir à changer le code client.
Vous ne pouvez pas utiliser MethodRental pour AOP car il ne prend en charge que les méthodes dynamiques, n'est-ce pas? – Giorgi
@Giorgi: désolé, je ne voulais pas être trompeur. Vous pouvez l'utiliser pour AOP, mais vous aurez toujours les mêmes contraintes imposées par 'MethodRental': spécifiquement, vous ne pouvez l'utiliser que sur des méthodes/assemblages dynamiques. Selon ce que vous essayez de faire, cela pourrait ne pas être utile du tout. Toutes les utilisations que j'ai énumérées ont cette même contrainte fondamentale, cependant. –
Merci pour votre réponse. Comme la contrainte est très limitée, c'est parce que je ne pouvais pas penser à un usage possible. – Giorgi