Run Time Inlining в C #? - PullRequest
       16

Run Time Inlining в C #?

2 голосов
/ 07 мая 2010

Пара вопросов по C #

  1. Поддерживает ли C # инлайнинг во время выполнения?
  2. Оптимизирует ли JIT до или во время выполнения кода?
  3. Может ли виртуальная функция быть встроенной?

Ответы [ 3 ]

7 голосов
/ 07 мая 2010

C # язык не делает вставку, но компилятор .NET CLR JIT может.

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

JIT оптимизирует перед выполнением кода, когда функция вызывается впервые. Потому что, прежде чем JIT начнет работать, у вас нет кода для выполнения. : P JIT происходит только один раз при первом вызове функции, а не при каждом вызове функции.

Обратите внимание, что встраивание выполняется только в сборке (DLL). JIT-компилятор не будет копировать код из другой сборки, чтобы встроить его в код этой сборки.

7 голосов
/ 07 мая 2010

C # не поддерживает встраивание явно. JIT-компилятор может делать некоторые вставки за сценой при оптимизации.

4 голосов
/ 07 мая 2010

Сам компилятор C # не выполняет вставку (что можно проверить, открыв сборку в Reflector).JIT-компилятор CLR делает встраивание, вот одна запись в блоге по теме (многие другие есть).

Обратите внимание, что в целом компиляторы .NET не могут выполнять встраивание через границы DLL, так какDLL может изменить после того, как код, который зависит от DLL, был скомпилирован.Так что имеет смысл делать встраивание во время выполнения.

...