Подтвердить что ты не робот

Практические занятия класса MethodRental?

Согласно MSDN MethodRental Class позволяет изменять тело метода динамических модулей. Однако из-за его ограничений я не могу придумать практические способы его использования. Google тоже не помог мне.

Любые идеи, для чего можно использовать класс?

4b9b3361

Ответ 1

Это похоже по духу на ICorProfilerCallback::JITCompilationStarted в паре с ICorProfilerInfo::SetILFunctionBody, но с большим количеством ограничений. Классы ICorProfiler* могут использоваться для выполнения инструментария во время выполнения практически для любого управляемого метода. Существуют профилировщики и отладчики, которые используют их для сбора информации о текущем процессе.

Вы можете использовать MethodRental для кода инструмента для диагностики. Некоторые примеры:

  • Функция enter/exit даст вам трассировку выполнения, которую вы могли бы использовать для получения данных профилирования.
  • Присваивающие примитивы синхронизации могут помочь вам диагностировать условия гонки.
  • Инструментальные базовые блоки могут помочь вам определить покрытие кода.

Вы также можете использовать MethodRental для улучшения функциональности существующего кода. Аспектно-ориентированное программирование. Вы можете "переплетать" безопасность, протоколирование или другие сквозные проблемы проектирования в существующий код. Однако для выражения ваших аспектов потребуется другое средство (XML, библиотека С#).

Наконец, вы можете использовать MethodRental для "обхода" существующего кода, т.е. вызовов метода перехвата, чтобы создать своего рода полиморфизм во время выполнения. Например, если у вас есть клиентский код, который использует некоторый динамически сгенерированный класс RegistryStore для получения некоторой конфигурации через GetConfig, вы можете переписать метод IL, чтобы изменить реализацию RegistryStore.GetConfig, чтобы вместо этого использовать файловую систему. Вы можете сделать это без изменения кода клиента.

Ответ 2

Не знаете, какие ограничения вы имеете в виду. Очевидно, что это может работать только на динамически генерируемые методы, созданные MethodBuilder. Методы класса, которые были JIT, скомпилированные из IL, загруженные из сборки, не могут быть заменены.

Вариант использования будет реализовывать среду выполнения для динамического языка, который поддерживает изменение методов уже определенных классов (переключение обезьян). Языки, такие как Ruby, Python, Javascript и т.д.