Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КонспЛекций_ГСиИО_Козак.doc
Скачиваний:
102
Добавлен:
06.12.2018
Размер:
8.64 Mб
Скачать

Промежуточный язык msil

Двоичные файлы .NET, со стандартными расширениями DLL или EXE, по своему внутреннему содержанию не имеют ничего общего с обычными исполняемыми файлами. Сборки не предоставляют свои методы в распоряжение приложений на компьютере, в отличие от COM компонентов не описываются IDL кодом и не регистрируются в системном реестре. Главное что двоичные файлы .NET не содержат зависящих от платформы команд. Содержимое сборок – это полатформено-независимый «промежуточный язык» Microsoft Intermediate Language (MSIL – промежуточный язык IL) Помимо инструкция IL сборки содержат также метаданные, которые подробно описывают все типы используемые в модуле. Часть метаданных, которая описывает саму сборку называется манифестом (manifest). Манифест содержит информацию о текущей версии сборки, об используемых ограничениях по безопасности, о поддерживаемом естественном языке (англ. рус.), а так же список всех внешних сборок которые потребуются для работы данной сборки.

Основные преимущества MSIL это:

  • Возможность полного межъязыкового взаимодействия, любой код на любом языке программирования .NET компилируется в стандартный набор инструкция IL, проблем во взаимодействии между блоками IL не будет.

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

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

Рис. 16 Роль среды выполнения .NET

Работа с пространствами имен

Разработчики на С# используют библиотеку базовых типов для всей среды .NET. Для организации типов внутри этой библиотеки используется концепция пространств имен. Главное отличие от библиотек, привязанных к конкретному языку (типа МFС для C++),заключается в том, что в любом .NET-совместимом языке используются те же самые типы и те же самые пространства имен, что и в С#.

Пространство имен (namespace) — это просто способ организации типов (классов, перечислений, интерфейсов, делегатов и структур) в единую группу. Обычно, в одном пространстве имен объединяются взаимосвязанные типы. В .NET предусмотрены пространства имен для организации типов для работы с базами данными, Web, многопоточностью, защитой данных и множества других задач.

Память в приложениях .Net

В приложениях .NET используются разные типы памяти: стек, неуправляемая куча, управляемая куча. Их основные характеристики:

Стек Стек — это область памяти, где во время выполнения приложения хранятся локальные переменные, параметры метода, возвращаемые значения и другие временные данные. Каждому потоку выделяется отдельный стек, используемый им в процессе работы как вспомогательная область. Очистка стека не является обязательной задачей сборщика мусора, потому что та часть стека, которая резервируется при вызове метода, автоматически очищается при возврате из него. Однако следует заметить, что сборщику мусора известны ссылки на объекты, хранящиеся в стеке. Когда для метода создается экземпляр объекта, то ссылка на него (32-разрядное либо 64-разрядное целое число, в зависимости от платформы) остается в стеке, но сам объект хранится в управляемой куче; он удаляется сборщиком мусора, как только переменная выходит из области видимости.

Неуправляемая куча Неуправляемая куча используется для структур данных времени выполнения, таблиц методов, языка MSIL, динамически скомпилированного (JIT) кода и т.п. Неуправляемый код размещает объекты в неуправляемой куче либо в стеке в зависимости от того, как был создан экземпляр объекта. Управляемый код может выделять память в неуправляемой куче непосредственно при вызове неуправляемых API Win32 либо при создании экземпляров объектов COM. Сама среда CLR широко использует неуправляемую кучу для хранения своих структур данных и кода.

Управляемая куча Управляемая куча — это область памяти, в которой размещаются управляемые объекты и работает сборщик мусора. В среде CLR используется сборщик мусора, работающий по поколениям и осуществляющий сжатие памяти. Суть работы по поколениям заключается в том, что все объекты имеют возраст, и всякий раз по окончании сбора мусора возраст оставшихся объектов увеличивается; работа по поколениям увеличивает производительность сборщика. Во всех версиях среды .NET Framework для сборщика мусора поддерживаются три поколения: Gen0, Gen1 и Gen2 (перечисленные в порядке старшинства, т.е. от самого младшего к самому старшему). Осуществляя сжатие памяти, сборщик мусора размещает объекты в управляемой куче таким образом, чтобы в ней не осталось незанятых участков, а вся освободившаяся память была связной. Перемещение больших объектов связано со значительными затратами; чтобы избежать их, сборщик мусора размещает большие объекты в специальной куче, которая называется кучей больших объектов и не подлежит сжатию. Дополнительные сведения об управляемой куче и сборщике мусора можно найти в публикациях Джеффри Рихтера (Jeffrey Richter) на MSDN.