Ответ 1
Смотрите: CLR Inside Out - преимущества производительности NGen.
Пропускная способность кода, скомпилированного с помощью NGen, ниже, чем у JIT-скомпилированных прежде всего по одной причине: ссылки на кросс-сборку. В JIT-скомпилированный код, ссылки на кросс-сборку могут быть реализованы как прямые вызовы или скачки, поскольку точные адреса этих ссылок известны во время выполнения. Для статически скомпилированного кода однако, ссылки на кросс-сборку должны проходить через слот перехода, который получает заполняется правильным адресом во время выполнения, выполняя метод pre-stub. Метод pre-stub обеспечивает, среди прочего, то, что загружаются собственные изображения для сборок, на которые ссылается этот метод в память до того, как будет выполнен метод. Только для предварительного заглушки выполняться при первом вызове метода; это короткое замыкание для последующих вызовов. Однако каждый раз, когда метод, ссылки на кросс-сборку необходимо пройти через уровень косвенности. В основном это объясняется тем, что 5-10 процентное снижение пропускной способности для кода, скомпилированного по NGen, по сравнению с JIT-скомпилированный код.