Если оптимизации включат, то JIT будет всегда встраивать этот метод?

Как? Взглянуть на Carel Lotz блог .

Почему? Существует несколько причин, что я могу думать:

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

статья Martin Fowler о Непрерывная Интеграция остается категорическим текстом. Взгляните на него!

6
задан ChaosPandion 27 August 2009 в 21:48
поделиться

1 ответ

Встраивание - это деталь реализации JIT, а не компилятора C #. Из блога Эрика Ганнерсона :

JIT использует ряд эвристик для решить, должен ли метод быть на подкладке. Ниже приводится список более значительный из них (примечание что это не является исчерпывающим):

  • Методы, размер которых превышает 32 байта IL, не будут встроены.
  • Виртуальные функции не встроены.
  • Методы со сложным управлением потоком не будут встроены. Сложный управление потоком - любое другое управление потоком чем if / then / else; в этом случае, switch или while.
  • Методы, содержащие блоки обработки исключений, не встроенные, хотя методы, которые бросают исключения по-прежнему являются кандидатами на встраивание.
  • Если какой-либо из формальных аргументов метода является структурами, метод будет не быть встроенным.

Хотя ваш метод довольно короткий и не очень сложный, поэтому он может соответствовать эвристике, Nullable - это структура , поэтому я предполагаю, что ваш метод не встроен.

Как показывает практика, если встраивание этого метода улучшает производительность, JIT будет встроить этот метод; иначе не будет. Но на самом деле это деталь реализации JIT, и вы не должны кодировать ничего для этого:

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

РЕДАКТИРОВАТЬ: Очевидно бит о структурах, которые не встраиваются, устарел; обновленную информацию можно найти в блоге Вэнса Моррисона .

22
ответ дан 8 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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