Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1 (ч.5 дополн). СП С#.doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
520.19 Кб
Скачать

Переносимость

Alpha

ЭВМ

PowerPC

x86

Формат управляемого модуля

Импортируемые типы и их члены

Локальная сеть

Интернет

  • Метаданные — это просто набор таблиц данных, описывающих то, что определено в модуле, например, типы и их члены. Метаданные имеют также таблицы, указывающие, на что ссылается управляемый модуль, например, на импортируемые типы и их члены.

  • Метаданные всегда встроены в тот же EXE/DLL, что и код, поэтому метаданные и IL-код, описываемый ими, никогда не бывают рассинхронизированы.

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

  • Функция VS .NET IntelliSense анализирует метаданные и сообщает, какие методы предлагает тип и какие параметры требуются этим методам.

  • CLR использует метаданные, чтобы убедиться, что ваш код совершает только «безопасные» операции.

Объединение управляемых модулей в сборку

  • Сборка - это логическая группировка одного или нескольких управляемых модулей или файлов ресурсов (однофайловая или многофайловая)

  • Сборка - это самая маленькая единица, с точки зрения повторного использования, безопасности и отслежи­ва­ния версий, то есть сборка выполняется как одно целое.

  • Сборки позволяют вам разбить на части процесс развертывания файлов и в то же время рассматривать все файлы как единый набор (отдельные файлы могут загружаться из Web по мере надобности).

  • CLR знает о сборке все, что нужно для ее выполнения. (Дополнительной информации не требуется ни в реестре, ни в службе каталогов Active Directory. А раз так, развертывать сборки гораздо проще, чем неуправляемые компоненты.)

Загрузка CLR

При запуске управляемой сборки в Windows XP/.NET Server загрузчик ОС определяет, является ли файл управляемым модулем, и если это так, то автоматически загружает CLR (MSCorEE.dll) в адресное пространство процесса.

Интеграция языков и повторное использование кода

Исполнение кода сборки

Непосредственно перед исполнением метода Main() CLR находит все типы, на которые ссылается код Main(). При этом CLR выделяет внутренние структуры данных, используемые для управления доступом к типам, на которые есть ссылки.

Эти внутренние структуры данных содержат по одной записи для каждого метода, определенного в типе.

Каждая запись содержит адрес, по которому можно найти реализацию метода.

Производительность управляемых приложений

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

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

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

if (numberOfCPUs > 1) {

}

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

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

  • Код машины подвергается компилятором оптимизации.

Получение процессорного кода

Утилита NGen.exe, поставляемую с .NET Framework SDK компилирует весь IL-код некоторой сборки в процессорный код и сохраняет его в дисковом файле.

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

Надежность приложений

По мнению специалистов, главное достоинство IL не в том, что он позволяет абстрагироваться от конкретного типа процессора. Главное — надежность приложений.

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

2. Метаданные управляемого модуля включают все сведения о методах и типах, необходимые для верификации. Если выясняется, что IL-код «небезопасен», генерируется исключение System.Security.VerificationException, и соответствующий метод не выполняется.

3. Так как управляемые приложения не производят некорректного обращения к памяти и не влияют на код другого приложения, CLR предоставляет возможность выполнения множества управляемых приложений в одном процессе ОС. С этим связано понятие домен приложения.

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

В .NET Framework включены сборки библиотеки классов .NET Framework Class Library (FCL), содержащие определения несколь­ких тысяч типов.

В результате CLR и FCL позволяют пользователям создавать следующие виды приложений:

  • Web-сервисы XML. Методы, к которым можно легко обратиться через Интернет.

Web-сервисы, конечно же, являются главным козырем инициативы Microsoft под названием «.NET».

  • Web Forms. Приложения, основанные на HTML (Web- сайты).

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

Технология Web Forms поддерживается средой разработки в стиле Visual Basic 6.

  • Windows Forms. Windows-приложения с богатым графическим интерфейсом пользователя.

Как и приложения Web Forms, приложения Windows Forms выполняют запросы БД и вызовы Web-сервисов XML. Для Windows Forms предлагается среда разработки, подобная Visual Basic 6.

(Классы для офисных приложений.)

  • Консольные приложения Windows.

  • Службы Windows, которыми управляет диспетчер Windows Service Control Manager (SCM).

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

Пространства имен

Поскольку FCL насчитывает тысячи типов, наборы «родственных» типов скомпонованы в отдельные пространства имен:

Пространство имен

Описание содержимого

System

Все базовые типы, используемые каждым приложением.

System.Windows. Forms

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

System.Collections

Типы для работы с наборами объектов; включает такие попу­ лярные типы-наборы, как стеки, очереди, хэш-таблицы и т. д.

System.Drawing

Типы для работы с двумерной графикой; обычно применяются в приложениях Windows Forms, а также для создания картинок для страниц Web Forms.

System.I0

Типы, реализующие потоковый ввод/вывод, работу с файлами и каталогами

System.Web Services

Типы для создания Web-сервисов XML.

System.Web.UI

Типы, используемые в приложениях Web Forms.

System.EnterpriseServices

Типы для управления транзакциями, очередями компонентов, пулами объектов, JIT-активацией и другие функции для более эффективной реализации управляемого кода на сервере.

System.Globalization

Типы поддержки национальных языков (National Language Support, NLS), такие как сравнение строк, форматы и календарь.

System.Management

Типы для управления компьютерами посредством Windows Management Instrumentation (WMI).

System.ServiceProcess

Типы, используемые в приложениях-службах, которые могут управляться SCM.

System.Net

Типы, реализующие сетевое взаимодействие.

System.Reflection

Типы, позволяющие просматривать метаданные и осуществлять позднее связывание типов и их членов.

System.Resources

Типы для работы с внешними ресурсами.

System.Runtime.InteropServices

Типы, позволяющие управляемому коду получать доступ к неуправляемым функциям ОС, таким как СОМ- компоненты и Win32 DLL.

System.Runtime.Remoting

Типы, обеспечивающие удаленный доступ к типам.

System.Runtime.Serialization

Типы, позволяющие сохранять экземпляры объектов и восстанавливать их из потоков.

System.Security

Типы, используемые для защиты данных и ресурсов.

System.Text

Типы для работы с текстом в различной кодировке, например ASCII или Unicode.

System.Threading

Типы, используемые для асинхронных операций и синхронизации доступа к ресурсам.

System. Xml

Типы для обработки XML-схем и данных.

System.Diagnostics

Типы, помогающие отлаживать приложения и оснащать их инструментальными средствами.