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