Ответ 1
Для выполнения кода на платформе .NET представление Common Intermediate Language (CIL) необходимо преобразовать в машинный код. Если это происходит непосредственно перед выполнением, это называется компиляцией JIT (Just In Time). Вывод JIT не сохраняется, поэтому ваше управляемое приложение должно проходить JIT при каждом запуске.
Кроме того, вы можете использовать предварительную компиляцию, чтобы уменьшить накладные расходы при запуске, связанные с JIT-компиляцией. NGen выполняет предварительную компиляцию и сохраняет собственные изображения в собственном кэше изображений. Тогда приложения могут работать с собственными образами и могут столкнуться с более быстрым временем запуска из-за уменьшения накладных расходов при компиляции JIT. Изначально NGen был технологией времени установки, разработчики заставляли установщиков приложений запускать команды NGen для запуска предварительной компиляции во время установки. Для получения более подробной информации, ознакомьтесь с NGen Revs Up Your Performance с новыми мощными функциями. В этой статье приведен пример приложения, использующего NGen.
В Windows 8 (.NET 4.5) появился новый режим NGen: "Auto NGen". По сути, среда выполнения .NET генерирует журналы использования для управляемых приложений. Когда система находится в режиме ожидания, задача автоматического обслуживания выполняется в фоновом режиме и создает собственные изображения. Таким образом, разработчикам больше не нужно явно иметь дело с NGen. Обратите внимание, что эта функция включена только для приложений .NET 4. 5+, которые ориентированы на Window Store или используют GAC. Вот страница MSDN, которая может быть полезна: Создание собственных изображений
И это общий обзор NGen и связанных с ним технологий: Вам нужна скорость? Приложения .NET запускаются быстрее
Наконец, сами библиотеки .NET Framework используют NGen для повышения производительности. При обслуживании .NET Framework некоторые нативные образы становятся недействительными. Затем NGen необходимо запустить, чтобы заново сгенерировать недопустимые собственные изображения. Это делается автоматически через сервис .NET Runtime Optimization, который работает во время простоя.