2010-09-29 2 views
2

Насколько я помню, функция JIT'd, когда она называется второй раз.Главный метод JIT'd?

Как насчет основного метода? Будет ли код внутри JIT'd?

Если я замерил некоторый фрагмент кода, должен ли я завернуть его в функцию?

ответ

6

Все .NET (MSIL) код должен быть JIT'ed (компилируется в машинный код), прежде чем он может быть выполнен.

Возможно, вы имеете в виду тот факт, что, как только код был JIT'ed, он кэшируется. Накладные расходы JIT'ing только понесены один раз. Если вы хотите выполнить контрольный тест без накладных расходов JIT, вам придется «предварительно разогреть» ваш бенчмарк или, возможно, использовать NGEN для компиляции MSIL на постоянной основе.

1

Метод первый раз, когда он называется.

.Net не способен выполнять несмешанные методы.

Таким образом, main сотрясается.

See also this answer from Jon Skeet.

3

Чтобы ответить на стороне вопрос:

Если я MESURE некоторый кусок кода, должен я завернул его в функцию?

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

Смежные вопросы