Добавил:
выбрасываю тут свой мусор, надеюсь, что он кому-то может пригодится... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP-KONEChNYJ.docx
Скачиваний:
20
Добавлен:
03.12.2023
Размер:
7.72 Mб
Скачать

2. Управляемый и неуправляемый код. Взаимодействие с унаследованным кодом. Структура сборки net - приложения.

Управляемый код - данное приложение создано на основе платформы .NET и поэтому управляется общеязыковой средой CLR, которая загружает приложение и при необходимости очищает память.

Неуправляемые - приложения, например, созданные на языке С++, которые компилируются не в общий язык CIL, как C# или VB.NET, а в обычный машинный код.

Платформа .NET поддерживает следующие виды совместимости с унаследованным кодом:

  • вызовы из типов .NET напрямую к модулям DLL, созданным на С (то есть обращения к Win32 API или пользовательским модулям DLL);

  • взаимодействие .NET и СОМ;

  • применение элементов управления ActiveX в Windows Forms;

  • вызовы из типов СОМ к типам .NET;

Сборка (assembly)

В первом приближении - аналог EXE или DLL; более того, в случае приложения, состоящего из одного файла, сборка даже имеет расширение .exe или .dll. Несмотря на это сходство, сборка содержит существенно больше информации о приложении, чем традиционные исполняемые файлы.

Причина появления - трудности установки Windows-приложений. Наконец, многие приложения использовали разделяемые DLL, что зачастую приводило к проблемам при установке более новых версий этой DLL.

Понятие сборки было введено для того, чтобы решить эти проблемы.

C точки зрения структуры любая сборка .NET (*.dll или *.ехе) включает в себя следующие элементы:

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

  • заголовок файла CLR – блок данных, который поддерживает все сборки .NET, для обслуживания в CLR (флаги для исполняющей среды)

  • CIL-код – промежуточный язык, не зависящий от платформы, платформы и процессора. (работает посредством JIT- компилятора) Служит для работоспособности сборок в разных архитектурах устройствах и ОС.

  • метаданные типов – формат находящихся внутри сборки типов, внешних типов. Выяснение того, в каком месте двоичного файла находятся типы и размещение типов в памяти.

  • манифест сборки – входящие в состав сборки модули + версия сборки + внешние сборки (на которые есть ссылки).

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

Все эти компоненты могут находиться в одном файле, и тогда сборка представляет один единственный файл в формате exe или dll.

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

  1. Назначение, достоинства и недостатки msil. Процесс компиляции и исполнения net – приложения.

.NET-приложения компилируются фактически в два этапа.

На первом этапе исходный код компилируется во время построения проекта и вместо исполняемого файла с машинными кодами получается сборка (assembly), содержащая команды промежуточного языка MSIL (Microsoft Intermediate Language — промежуточный язык Microsoft). Код IL сохраняется в файле на диске. При этом файлы MSIL (сокращенно IL), генерируемые компилятором, например, С#, идентичны IL-файлам, генерируемым компиляторами с других языков .NET. В этом смысле платформа остается в неведении относительно языка. Самой важной характеристикой среды CLR является то, что она общая ; одна среда выполняет как программы, написанные на С#, так и программы на языке VB.NET.

Особенности MSIL:

  • Высокоуровневый ассемблер некоторой виртуальной машины;

  • Переносимость между разными аппаратными платформами;

  • Можно получить при компиляции из нескольких языков программирования;

  • Сохранение имен классов, методов и исключительных ситуаций;

  • Возможность обратного ассемблирования – является в большей степени минусом, т.к. очень легко получить исходный код программы, хоть и не в самом красивом виде;

  • Происходит значительное уменьшение производительности кода;

  • Излишняя универсальность из-за того, что используется несколько языков программирования;

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

MSIL представляет собой дополнительный уровень абстракции, позволяющий легко справляться с переносом кода с одной платформы на другую, в том числе, и с изменением разрядности платформы.

Отметим, что MSIL сохраняет много информации об именах, использованных в исходной программе: имена классов, методов и исключительных ситуаций сохраняются и могут быть извлечены при обратном ассемблировании.

Второй этап компиляции наступает непосредственно перед фактическим выполнением страницы. На этом этапе CLR транслирует промежуточный код IL в низкоуровневый собственный машинный код, выполняемый процессором. Процесс происходит следующим образом: при выполнении .NET-программы системы CLR активизирует JIT-компилятор, который затем превращает MSIL во внутренний код процессора. Этот этап известен как оперативная компиляция "на лету" (Just-In-Time) или JIT-компиляция (JIT'ing), и он проходит одинаково для всех приложений .NET (включая, например, приложения Windows). При исполнении программы CLR берет на себя управление памятью, контроль типов и решает за приложение ряд других задач.

Преимущества JIT:

  • Работает по запросу

  • Интеллектуален, распознаёт был ли код скомпилирован

  • По мере выполнения, программа выполняется всё быстрее-быстрее, т.к. выполняется скомпилированный код

Благодаря двум этапам компиляции можно создать скомпилированную сборку с кодом .NET и распределить ее более чем на одну платформу.

Соседние файлы в предмете Объектно-ориентированное программирование