Ответ 1
Это похоже по духу на ICorProfilerCallback::JITCompilationStarted
в паре с ICorProfilerInfo::SetILFunctionBody
, но с большим количеством ограничений. Классы ICorProfiler*
могут использоваться для выполнения инструментария во время выполнения практически для любого управляемого метода. Существуют профилировщики и отладчики, которые используют их для сбора информации о текущем процессе.
Вы можете использовать MethodRental
для кода инструмента для диагностики. Некоторые примеры:
- Функция enter/exit даст вам трассировку выполнения, которую вы могли бы использовать для получения данных профилирования.
- Присваивающие примитивы синхронизации могут помочь вам диагностировать условия гонки.
- Инструментальные базовые блоки могут помочь вам определить покрытие кода.
Вы также можете использовать MethodRental
для улучшения функциональности существующего кода. Аспектно-ориентированное программирование. Вы можете "переплетать" безопасность, протоколирование или другие сквозные проблемы проектирования в существующий код. Однако для выражения ваших аспектов потребуется другое средство (XML, библиотека С#).
Наконец, вы можете использовать MethodRental
для "обхода" существующего кода, т.е. вызовов метода перехвата, чтобы создать своего рода полиморфизм во время выполнения. Например, если у вас есть клиентский код, который использует некоторый динамически сгенерированный класс RegistryStore
для получения некоторой конфигурации через GetConfig
, вы можете переписать метод IL, чтобы изменить реализацию RegistryStore.GetConfig
, чтобы вместо этого использовать файловую систему. Вы можете сделать это без изменения кода клиента.