Это устанавливается при компиляции вашей сборки. Существует два типа оптимизации:
- оптимизация IL
- Качество исходного кода JIT.
По умолчанию это
/optimize- /debug-
Это означает неоптимизированный IL и оптимизированный нативный код.
/optimize /debug(+/full/pdbonly)
Это означает неоптимизированный IL и неоптимизированный нативный код (лучшие настройки отладки).
Наконец, чтобы получить самую быструю производительность:
/optimize+ /debug(-/+/full/pdbonly)
Это производит оптимизированный IL и оптимизированный собственный код.
При создании неоптимизированного IL компилятор будет вставлять инструкции NOP по всему коду. Это облегчает отладку кода, позволяя устанавливать точки останова в инструкциях потока управления, например, для, если, в противном случае, попытаться, перехватить и т. Д.
CLR отлично справляется с оптимизацией кода. После того, как метод JIT'ed, указатель на вызов или инструкцию callvirt указывается непосредственно на собственный код.
Кроме того, CLR будет использовать любые архитектурные приемы, доступные при JIT-кодировании вашего кода. Это означает, что сборка, запущенная через JIT, будет работать быстрее, чем сборка, предварительно скомпилированная с использованием Ngen (хотя и с немного более медленным временем запуска), поскольку NGen будет компилироваться для всех платформ и не использовать какие-либо приемы.