Задать вопрос
@ldmitriy

Как работает .NET?

Когда я в Visual Studio нажимаю собрать проект(зеленая стрелка) что происходит?
Я понял так: компилятор преобразует код в промежуточный байт код, который называется CIL(MSIL). Этот код выполняется средой CLR, в которую входит JIT компилятор, в машинные коды. Получается exe.

В CLR не входит CIL?
JIT запускается каждый раз при сборке проекта или только один раз чтобы запомнить архитектуру платформы?
  • Вопрос задан
  • 1363 просмотра
Подписаться 3 Простой Комментировать
Ответ пользователя Василий Банников К ответам на вопрос (3)
Когда вы нажимаете "зелёную кнопку" происходит следующее:
  1. Visual studio вызывает .NET SDK
  2. .NET SDK вызывает msbuild
  3. msbuild в определённый момент вызывает csc.exe (C# Compiler)
  4. csc.exe генерирует IL (aka MSIL, aka CIL) и заталкивает его в DLL-ки
  5. ^---- Это происходит при сборке проекта
  6. <-- В этот момент на .net framework можно было натравить Ngen и пропустить чать JIT-компиляции
  7. V---- А это при каждом запуске
  8. Затем .NET Runtime берёт эти сборки и передаёт IL-код JIT-компилятору
  9. Пока JIT в фоне компилирует IL в машинный код - рантайм интерпретирует IL
  10. Когда IL скомпилировался - рантайм берёт сгенерированный машинный код
  11. При этом в фоне JIT может собирать информацию о том, какие методы чаще вызываются, чтобы ещё их оптимизировать.


Ещё во время сборки проекта можно предварительно натравить JIT на код.
При запуске это позволит пропустить этап с интерпретацией и сразу запустить исполняемый код.
Эта фича называется ReadyToRun Compilation

Тут в одном из ответов посоветовали CLR via C# - я считаю, что это уже не самая актуальная книга, тк в .NET Core многое поменялось / дополнилось и могут отличаться нюансы.

Если хотите подробнее узнать про JIT - начните с этого доклада:
https://www.youtube.com/watch?v=H1ksFnLjLoY
Ответ написан
Комментировать