Этот ответ содержит список оптимизаций и стратегий, используемых оптимизатором JIT. Они принципиально не отличаются от того, что делает нативный оптимизатор кода.
Одним из ограничений в дрожании является то, что он не может тратить много времени на анализ кода. Каждые миллисекунды, которые он записывает, влияют на скорость реакции программы. Две стратегии помогают. Сборки могут быть предварительно объединены с помощью ngen.exe, все сборки .NET есть, и разумно сделать то же самое с вашими собственными сборками. До тех пор, пока они «большие», на сбор кода может уйти меньше времени, чем на поиск и загрузку файла .ni.dll на диск.
И джиттер компилирует код по требованию, непосредственно перед тем, как метод начинает выполняться. Что имеет тенденцию распределять затраты с течением времени, что относится к коду, который выполняется в человеческое время, когда важна оперативность.
Стоит отметить, что джиттер может использовать основные инструкции. Это край, который в значительной степени исчез, в наши дни ядра не так уж отличаются. Но он легко сгенерирует 64-битный код в операционной системе x64, не делая ничего особенного.
Типичное число, о котором идет речь, состоит в том, что машинный код с джитами на 85% эффективнее исходного скомпилированного кода. Предположим, что с несколькими большими кусками соли качество и характер исходного кода всегда на первом месте.