|
Исполнение кода сборки (часть 2)
Функции JITCompiler известен вызываемый метод и тип, в котором он определен. JITCompiler ищет в метаданных соответствующей сборки IL-код вызываемого
метода. Затем JITCompiler проверяет и компилирует lL-код в собственные команды процессора, которые сохраняются в динамически выделенном блоке памяти.
После этого JITCompiler возвращается к внутренней структуре данных типа и заменяет адрес вызываемого метода адресом блока памяти, содержащего собственные команды процессора. В завершение JITCompiler передает управление коду в
этом блоке памяти. Этот код — реализация метода WriteLine (той его версии, что
принимает параметр String). Из этого метода управление возвращается в Main,
который продолжает нормальную работу.
Затем Hain обращается к W r i t e L i n e вторично. К этому моменту код writeLine уже
проверен и скомпилирован, так что производится обращение к блок)' памяти, минуя
вызов JITCompiler. Отработав, метод W r i t e L i n e возвращает управление Main. При повторном обращении к W r i t e L i n e ,
Производительность теряется только при первом вызове метода. Все последу-
ющие обращения выполняются «на полной скорости»: повторная верификация и
компиляция не производятся. JIT-компилятор хранит команды процессора в динамической памяти. Это !на-
чит, что скомпилированный код уничтожается при завершении приложения Так
что, если потом вы снова вызовете приложение или если вы одновременно запускаете два его экземпляра (в двух разных процессах ОС), JIT-компилятор заново будет компилировать IL-код в команды процессора.
Для большинства приложений снижение производительности, связанное с
работой JIT-компилятора, невелико. Большинство приложений раз за разом обращается к одним и тем же методам. На производительности это скажется только
раз. К тому же скорей всего больше времени занимает выполнение самого метода, а не обращение к нему.
Полезно также знать, что JIT-компилятор CLR оптимизирует процессорный код
аналогично компилятору неуправляемого кода C++. И опять же-, создание оптимизированного кода занимает больше времени, но производительность его будет гораздо выше, чем неоптимизированного.
Предыдущая стр.   
Оглавление   
Следующая стр.
Средняя оценка:     (1 - 1 голосов) Для оценки необходимо зарегистрироваться
Только зарегистрировавшиеся пользователи могут оставлять комментарии
|
|