louis vuitton bag moncler jacka ugg boots mbt sko louis vuitton oslo moncler ugg www.steklo1.ru
   Поиск
 

FrameWork

MicroSoft DotNet

Cи Шарп это просто Simple C#
Логин Пароль Вход Регистрация
Главная
Изучаем C#
Web-приложения
Win-приложения
Web-сервисы
ADO.NET
FrameWork
Алгоритмы
Исходники
Классы
Среда разработки
Статьи
Форум
FAQ
О Проекте
Обратная связь
Отблагодарить
Rambler's Top100

Исполнение кода сборки (часть 3)

Разработчики с опытом программирования на неуправляемых C/C++, вероятно, задумаются над производительностью. В конце концов неуправляемый код
компилируется для конкретного процессора и при вызове просто исполняется.
В управляемой же среде компиляция производится в две фазы. Сначала компилятор проходит исходный код и переводит его в IL. Но для исполнения сам IL-код
нужно перевести в команды процессора в период выполнения, что требует дополнительной памяти и процессорного времени.
Поверьте: я сам из тех, кто программирует на C/C++, и, переходя на CLR, я достаточно скептически рассматриваю все эти дополнительные накладные расходы.
Вторая стадия компиляции, имеющая место в период выполнения, снижает скорость
и требует дополнительной динамической памяти — с этим не поспоришь. Однако
Microsoft проделала большую рабо гу, чтобы свести эти издержки к минимуму.
Если вы тоже скептик, сами создайте приложение и проверьте его производительность. Кроме того, можете взять какое-нибудь нетривиальное приложение от
Microsoft или другого разработчика и измерить его производительность. Я думаю,
вас удивит, насколько она высока на самом деле.
Трудно поверить, но многие (включая меня) считают, что управляемые приложения производительней неуправляемых, и тому есть масса подтверждений.
Например, когда JIT-компилятор компилирует IL-код в команды процессора в
период выполнения, он располагает более полными сведениями о среде выполнения в сравнении с компилятором неуправляемого кода. Вот некоторые способы, которые позволяют управляемому коду «опередить» неуправляемый,
• JIT-компилятор может обнаружить, что приложение запускается на процессоре Pentium 4 и сгенерировать процессорный код, полностью использующий
все преимущества особых команд Pentium 4- Неуправляемые приложения обычно компилируются в расчете на процессор, являющийся «наименьшим общим
знаменателем», избегая специфических команд, которые заметно повышают
производительность приложения на новейших процессорах.
• JIT-компилятор может обнаружить, что некоторая проверка всегда приводит
к отрицательному результату на конкретной машине
Этот код указывает JIT-компилятору, что для машины с одним процессором
не нужно генерировать никакие команды процессора. В этом случае собствен-
ный код процессора оптимизирован для конкретной машины: он короче и
выполняется быстрее.
• CLR может проанализировать выполнение кода и перекомпилировать IL-код в
команды процессора при выполнении приложения. Перекомпилированный код
может быть реорганизован с учетом обнаруженных некорректных прогнозов
ветвления.
Это лишь малая часть аргументов в пользу того, что управляемый код будущего будет исполняться лучше сегодняшнего неуправляемого. Как я сказал, производительность и сейчас очень неплохая для большинства приложений, а со временем ситуация только улучшится.
Если ваши эксперименты покажут, что JIT-компилятор CLR не обеспечивает
нужную производительность, можете использовать утилиту NGen.exe, поставляемую с .NET Framework SDK. NGen.exe компилирует весь IL-код некоторой сборки
в процессорный и сохраняет результирующий код процессора в дисковом файле. При загрузке сборки в период выполнения. CLR автоматически проверяем наличие предварительно скомпилированной версии сборки и, если она есть, загружает скомпилированный код, так что компиляция в период выполнения не производится.

Предыдущая стр.    Оглавление    Следующая стр.
Средняя оценка: (1 - 1 голосов)
Для оценки необходимо зарегистрироваться


Только зарегистрировавшиеся пользователи могут оставлять комментарии



Практический обучающий видео-курс "Основы C#"

От профессионального
разработчика для начинающих
и опытных программистов!

Кликните, чтобы изучить
язык C# с нуля и научиться
писать программы под платформу .NET!