2014-11-25 3 views
1

Когда я устанавливаю приложение .NET, я понимаю, что он будет запущен. Мой вопрос заключается в том, что этот jitting случается каждый раз, когда я запускаю это приложение или это происходит только в первый раз? Если это произойдет только в первый раз, где я могу найти jitted версию этого приложения?Выполняется ли jitting каждый раз при запуске приложения .NET?

+1

Получение его только один раз - это то, о чем должен заботиться ваш установщик. Очевидным запросом google является «installer run ngen». –

ответ

2

В сборки JITted по частям, по мере необходимости. Ваш вопрос, кажется, подразумевает, что все приложение jit скомпилировано сразу. Это не то, что происходит. Части, которые были связаны в любой конкретный момент времени, находятся в памяти.

JIT-компиляция учитывает тот факт, что какой-либо код может никогда не вызываться во время выполнения. Вместо использования времени и памяти для конвертировать все MSIL в переносимый исполняемый файл (PE) в собственный код , он преобразует MSIL по мере необходимости во время выполнения и сохраняет полученный в результате нужный код в памяти, чтобы он был доступен для после вызывает в контексте этого процесса. Загрузчик создает и прикрепляет заглушку к каждому методу в типе, когда тип загружен и инициализирован. Когда метод вызывается в первый раз, stub передает управление компилятору JIT, который преобразует MSIL для этого метода в собственный код и изменяет заглушку на точку непосредственно на генерируемый код . Последующие вызовы JIT-скомпилированного метода поэтому переходят непосредственно к внутреннему коду.

Compiling MSIL to Native Code

Это не меняет ответ на ваш вопрос, но there are some differences in how the JIT compilation happens with .NET 4.5. На многоядерных процессорах потоку будет поручено компилировать методы до их фактического вызова.

1

Это происходит каждый раз, когда вы его запускаете. Существует инструмент под названием ngen 1, который генерирует двоичную исполняемую версию приложения, но он не используется так часто.

Ngen

Смежные вопросы