Есть ли способ, чтобы изменить .NET компилятор JIT для благоприятствовать производительности с течением времени компиляции?
===========================================================================================================================

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

 

Это устанавливается при компиляции сборки. Есть два вида оптимизации:

* оптимизация IL
* Качество JIT Native Code.

По умолчанию это

```
 /optimize- /debug-

```

Это означает, что неоптимизированная IL, и оптимизированный машинный код.

```
 /optimize /debug(+/full/pdbonly) 

```

Это означает, что неоптимизированная IL и неоптимизированные родной код (лучшие параметры отладки).

Наконец, чтобы получить максимальную производительность:

```
/optimize+ /debug(-/+/full/pdbonly)

```

Это производит оптимизировано IL и оптимизирован машинный код.

При производстве неоптимизированной IL, компилятор вставит NOP инструкции по всему коду. Это делает код легче для отладки, позволяя останова быть установлены по указанию потока управления, таких как для, в то время как, если, еще, попробуйте поймать и т.д.

CLR делает удивительно хорошую работу по оптимизации кода независимо. После того, как метод JIT'ed, указатель на вызов или инструкции callvirt указывается непосредственно в машинный код.

Кроме того, CLR будет воспользоваться любыми ухищрениями архитектуры, доступных при JIT'ing коде. Это означает, что сборка побежал через JIT будет работать быстрее, чем сборки предварительно скомпилированного с помощью NGEN (хотя и с немного медленнее, время запуска), а NGen будет составлять для всех платформ, а не воспользоваться любыми трюками.