скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Платформа Microsoft. NET Framework

После анализа заголовка ЕХЕ-файла для выяснения того, какой процесс запустить – 32-, 64-разрядный или WoW64, Windows загружает в адресное пространство процесса соответствующую (х86, х64 или IA64) версию библиотеки MSCorEE.dll. В Windows версии х86 одноименная версия MSCorEE.dll хранится в каталоге C:\Windows\System32. В версиях х64 и IA64 версия х86 библиотеки находится в каталоге C:\Windows\SysWow64, а 64-разрядная версия MSCorEE.dll (хб4 orIA64) размещается в каталоге C:\Windows\System32 (это сделано из соображений обратной совместимости).

Далее основной поток процесса вызывает определенный в MSCorEE.dll метод, который инициализирует CLR, загружает сборку ЕХЕ, а затем ее метод точки входа (Main). На этом процедура запуска управляемого приложения считается завершенной.

Как уже упоминалось, управляемые модули содержат метаданные и код на промежуточном языке (IL). IL – не зависящий от процессора машинный язык, это язык более высокого уровня в сравнении с большинством других машинных языков. Он позволяет работать с объектами и имеет команды для создания и инициализации объектов, вызова виртуальных методов и непосредственного манипулирования элементами массивов. В нем даже есть команды генерации и перехвата исключений для обработки ошибок. IL можно рассматривать как объектно-ориентированный машинный язык.

Для выполнения какого-либо метода его IL-код должен быть преобразован в машинные команды. Этим занимается JIT-компилятор CLR. Рассмотрим пример:


publicvoidMain()

{

Console.WriteLine(“HelloWorld”);

}

Непосредственно перед исполнением метода Main среда CLR находит все типы, на которые ссылается код Main. При этом CLR выделяет внутренние структуры данных, используемые для управления доступом к типам, на которые есть ссылки. В примере метод Main ссылается на единственный тип – Console, и CLR выделяет единственную внутреннюю структуру. Эта внутренняя структура данных содержит по одной записи для каждого метода, определенного в типе Console. Каждая запись содержит адрес, по которому можно найти реализацию метода. При инициализации этой структуры CLR заносит в каждую запись адрес внутренней, недокументированной функции, содержащейся в самой CLR. Это функция JIT Compiler.

Функции JIT Compiler известен вызываемый метод и тип, в котором он определен. JIT Compiler ищет в метаданных соответствующей сборки IL-код вызываемого метода. Затем JIT Compiler проверяет и компилирует IL-код в собственные машинные команды, которые сохраняются в динамически выделенном блоке памяти.

После этого JIT Compiler возвращается к внутренней структуре данных типа и заменяет адрес вызываемого метода адресом блока памяти, содержащего готовые машинные команды. В завершение JIT Compiler передает управление коду в этом блоке памяти. Этот код – реализация метода Write Line (той его версии, что принимает параметр String). Из этого метода управление возвращается в Main, который продолжает выполнение в обычном порядке.

Затем Main обращается к Write Line вторично. К этому моменту код Write Line уже проверен и скомпилирован, так что обращение к блоку памяти производится, минуя вызов JIT Compiler. Отработав, метод Write Line возвращает управление Main. Снижение производительности наблюдается только при первом вызове метода. Все последующие обращения выполняются «на полной скорости»: повторная верификация и компиляция не производятся.

JIT-компилятор хранит машинные команды в динамической памяти. Это значит, что скомпилированный код уничтожается по завершении работы приложения. Так что, если потом снова вызвать приложение или если одновременно запустить второй его экземпляр (в другом процессе ОС), JIT-компилятор заново будет компилировать IL-код в машинные команды.

Для большинства приложений снижение производительности, связанное с работой JIT-компилятора, незначительно. Большинство приложений раз за разом обращается к одним и тем же методам. На производительности это скажется только раз. К тому же, скорее всего больше времени занимает выполнение самого метода, а не обращение к нему.

Полезно также знать, что JIT-компилятор CLR оптимизирует машинный код аналогично компилятору неуправляемого кода C++. Создание оптимизированного кода занимает больше времени, но производительность его будет гораздо выше, чем неоптимизированного.

Многие авторитетные авторы считают, что управляемые приложения могут работать производительнее неуправляемых, и тому есть масса причин. Взять хотя бы тот факт, что превращая IL-код в команды процессора в период выполнения, JIT-компилятор располагает более полными сведениями о среде выполнения, чем компилятор неуправляемого кода. Ниже перечислены особенности, которые позволяют управляемому коду работать производительнее неуправляемого:

- JIT-компилятор может обнаружить факт выполнения приложения на Pentium 4 и сгенерировать машинный код, полностью использующий все преимущества особых команд этого процессора. Неуправляемые приложения обычно компилируют в расчете на среднестатистический процессор, избегая специфических команд, которые заметно повышают производительность приложения на новейших процессорах.

- JIT-компилятор может обнаружить, что определенное выражение на конкретной машине всегда равно false. Например, посмотрим на метод с таким кодом:

if (numberOfCPUs> 1)

{

}

Здесь number OfCPUs - число процессоров. Код указывает JIT-компилятору, что для машины с одним процессором не нужно генерировать никаких машинных команд. В этом случае машинный код оптимизирован для конкретной машины: он короче и выполняется быстрее.

- CLR может проанализировать выполнение кода и перекомпилировать IL-код в команды процессора во время выполнения приложения. Перекомпилированный код может реорганизовываться с учетом обнаруженных некорректных прогнозов ветвления.

Это лишь малая часть аргументов в пользу того, что управляемый код будущего будет исполняться лучше сегодняшнего неуправляемого. Производительность и сейчас очень неплохая для большинства приложений, а со временем ситуация только улучшится[1].

3.3 IL-код и верификация

IL ориентирован на работу со стеком, то есть все его команды помещают операнды в стек исполнения и извлекают результаты из стека. Поскольку в IL нет команд работы с регистрами, это упрощает работу разработчикам компиляторов для CLR: не нужно думать об управлении регистрами, да и команд в IL меньше (за счет отсутствия тех же команд работы с регистрами).

Команды IL не связаны и с типами. Например, IL-команда add складывает два последних операнда, помещенных в стек; нет отдельных 32- и 64-разрядной версий команды. При выполнении add определяет типы операндов в стеке и делает, что требуется.

Главное достоинство IL не в том, что он позволяет абстрагироваться от конкретного типа процессора, а в надежности и безопасности приложений. При компиляции IL в машинный код CLR выполняет верификацию, в процессе которой проверяется, все ли «безопасно» делает высокоуровневый IL-код: например, нужное ли число параметров передается методу и корректны ли их типы, правильно ли используются возвращаемые методами значения, имеют ли все методы операторы возврата и т.д. Все необходимые для верификации сведения о методах и типах есть в метаданных управляемого модуля.

В Windows у каждого процесса собственное виртуальное адресное пространство. Отдельные адресные пространства нужны потому, что нельзя полностью доверять коду приложения. Весьма вероятно, что приложение будет считывать или записывать данные по недопустимому адресу. Размещение каждого процесса Windows в отдельное адресное пространство позволяет добиться надежности: процесс не может нарушить работу других.

Между тем, верифицировав управляемый код, можно быть уверенным, что он не обратится некорректно к памяти и не повлияет на код другого приложения. Это значит, что можно выполнять несколько управляемых приложений в едином виртуальном адресном пространстве Windows.

Поскольку процессы в Windows требуют массу ресурсов ОС, наличие множества процессов отрицательно сказывается на производительности и ограничивает доступные ресурсы. Уменьшение количества процессов за счет запуска нескольких приложений в одном процессе ОС увеличивает производительность и снижает потребности в ресурсах, но никак не в ущерб надежности. Это еще одно преимущество управляемого кода перед неуправляемым.

CLR предоставляет возможность выполнения множества управляемых приложений в одном процессе ОС. Каждое управляемое приложение связано с доменом приложения (AppDomain). По умолчанию каждый управляемый ЕХЕ-модуль работает в собственном, отдельном адресном пространстве, где есть только один домен приложения. Однако процесс, являющийся хостом CLR (например, InternetInformationServices (IIS) или Microsoft SQL Server 2005), может выполнять домены приложений в одном процессе ОС[1].

3.4 Библиотека классов .NET Framework

В .NET Framework включены сборки библиотеки классов .NET FrameworkClassLibrary (FCL), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. В Microsoft работают над дополнительными библиотеками WinFx и DirectX SDK, которые предоставляют еще больше типов и функциональности. Благодаря библиотеке классов разработчики могут создавать многие виды приложений, в том числе перечисленные далее:

- Web-сервисы – методы, которые позволяют легко обрабатывать сообщения на основе XML, пересылаемые через Интернет.

- WebForms – приложения, основанные на HTML (Web-сайты). Обычно приложения WebForms выполняют запросы к базам данных и вызовы Web-сервисов, объединяют и фильтруют полученные данные, а затем выводят их в браузере, предоставляя развитый пользовательский интерфейс, основанный на HTML.

- WindowsForms–Windows-приложения с богатым графическим пользовательским интерфейсом. Вместо создания пользовательского интерфейса на базе страниц WebForms можно задействовать мощь настольных приложений Windows. В приложениях WindowsForms можно использовать преимущества поддержки элементов управления, меню, событий мыши и клавиатуры и взаимодействия напрямую с ОС. Как и приложения WebForms, приложения WindowsForms выполняют запросы баз данных и вызовы Web-сервисов.

- Консольные приложения Windows – для задач, не требующих богатого пользовательского интерфейса, это оптимальное решение. Многие компиляторы, утилиты и инструменты обычно реализованы как консольные приложения.

- Службы Windows– .NET Framework позволяет строить приложения-службы, которыми управляет диспетчер Windows Service Control Manager (SCM).

- Библиотеки компонентов – NETFramework позволяет создавать автономные компоненты (типы), которые легко использовать со всеми перечисленными выше видами приложений.

Поскольку FCL насчитывает тысячи типов, наборы родственных типов скомпонованы в отдельные пространства имен. Так, пространство имен System содержит базовый класс Object, который, в конечном счете, порождает все остальные типы. Кроме того, пространство имен System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода/вывода, а также группу полезных типов для безопасного преобразования типов, форматирования данных, генерирования случайных чисел и выполнения различных математических операций. Типами из пространства имен System пользуются все приложения.

Чтобы задействовать ту или иную функцию платформы, нужно знать пространство имен, содержащее тип, реализующий нужную функциональность. Чтобы изменить поведение FCL-типа, обычно просто создают производный тип.

Объектно-ориентированная природа NET Framework обеспечивает мощную основу для разработки. Разработчикам не возбраняется создавать собственные пространства имен, содержащие собственные типы. Эти пространства имен и типы четко соответствуют принципам программирования, предлагаемым платформой. В сравнении с Win32-программированием такой новый подход заметно упрощает разработку ПО.

Большинство пространств имен FCL предоставляет типы, которые можно задействовать в любых видах приложений [1].


4. Новые возможности платформы .NETFramework 4.0

В 2010 году компанией Microsoft была выпущена платформа NET Framework 4.0. Эта платформа содержит ряд усовершенствований и нововведений. Список некоторых из них представлен ниже:

- Среда DLR. Среда DLR представляет собой новую среду выполнения, которая расширяет среду CLR дополнительным набором служб для динамических языков. Среда DLR упрощает разработку динамических языков, используемых в NETF ramework и добавляет динамические функции в языки со статической типизацией. Для поддержки среды DLR в платформу NETF ramework добавлено новое пространство имен System.Dynamic.

- Сборка мусора. Платформа NETF ramework 4 обеспечивает фоновый сбор мусора. Эта функция заменяет параллельный сбор мусора в предыдущих версиях и обеспечивает повышенную производительность.

- Managed Extensibility Framework. Платформа Managed Extensibility Framework (MEF) – это новая библиотека в NETF ramework 4, полезная при создании расширяемых и комбинируемых приложений. MEF позволяет указывать точки, где приложение может быть расширено, предоставлять доступ к службам другим расширяемым приложениям и создавать части, предназначенные для использования расширяемыми приложениями. Она также позволяет легко обнаруживать доступные части на основе метаданных без необходимости загрузки сборок с этими частями.

- Возможности программирования для Office. Благодаря добавлению именованных и дополнительных аргументов, типа dynamic, индексированных свойств и дополнительных модификаторов ref удалось значительно улучшить доступ к COM-интерфейсам, в том числе к API-интерфейсам автоматизации Office.

- Поддержка эквивалентности типов. Теперь можно развертывать приложения с внедренными сведениями о типах, а не со сведениями, импортированными из основной сборки взаимодействия. Приложение, содержащее внедренные сведения о типах, может использовать типы в среде выполнения, не ссылаясь на сборку среды выполнения. Если опубликовано несколько версий сборки среды выполнения, приложение, содержащее внедренные сведения о типах, может работать с различными версиями без перекомпиляции.

- Ковариация и контрвариация. Ковариация позволяет использовать более производный тип, чем это указано в универсальном параметре, тогда как контрвариация позволяет использовать менее производный тип. Благодаря этому можно осуществлять неявное преобразование классов, реализующих вариантные интерфейсы, и обеспечивать большую гибкость при сопоставлении сигнатур методов с типами вариантных делегатов.

- Платформа NET Framework теперь поддерживает файлы с отображением в памяти. С их помощью можно вносить изменения в очень большие файлы и создавать совместно используемую память для межпроцессного взаимодействия [4].


Заключение

В работе было изложено описание архитектуры, структуры и принципов работы платформы Microsoft NET Framowork. Были рассмотрены преимущества и недостатки данной платформы в сравнении с другими уже существующими решениями. Можно сделать вывод, что платформа Microsoft NET Framework в свое время явилась большим достижением в области разработки программного обеспечения, предоставляя уникальные инновационные возможности.

Также необходимо отметить, что с момента выпуска первой версии платформы NET Framework 1.0 она претерпела некоторые изменения и много дополнений, которые также призваны повысить эффективность разработки. Компания Microsoft продолжит развитие своей платформы и в будущем.

Таким образом, платформа Microsoft NET Framework является прекрасной универсальной платформой для разработки многочисленных типов программных средств, начиная от простых настольных программ, заканчивая сложными корпоративными системами и серверами.


Список использованных источников

1.  Рихтер, Джефри. CLRviaC#. Программирование на платформе Microsoft NET Framework 2.0 на языке C#. – Питер, Русская Редакция, 2007 г. – 656 с.

2.  Троелсен, Эндрю. С# 2008 и платформа .NET 3.5 Framework. 4-е изд. - М.: Вильямс, 2009. – 1168 с.

3.  Рихтер Джефри. Программирование на платформе Microsoft NET Framework. – Питер, Русская Редакция, 2005 г. – 486 с.

4.  Новые возможности NET Framework [Электронный ресурс] / MSDN – Электронные данные – Режим доступа: http://msdn.microsoft.com/ru-ru/library/ms171868.aspx.


Страницы: 1, 2


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.