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