Практические использования Класса MethodRental?

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

Какие-либо идеи, для чего может использоваться класс?

12
задан Giorgi 17 May 2010 в 09:35
поделиться

2 ответа

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

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

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

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

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

6
ответ дан 2 December 2019 в 21:42
поделиться

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

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

6
ответ дан 2 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: