Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
My_shpory_Ivan_Ivanich (2).docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
149 Кб
Скачать
☆

10. Метаданные сборок, структура сборок, домены приложений

Метаданные — это данные в двоичном формате с описанием программы, хранящиеся либо в переносимом исполняемом (PE) файле среды CLR, либо в памяти. Когда код компилируется в PE-файл, метаданные помещаются в одну часть файла, а код преобразуется в MSIL и помещается в другую часть файла. В метаданных описываются все типы и члены, определенные или используемые в модуле или сборке. При исполнении кода среда выполнения загружает метаданные в память и обращается к ним для получения сведений о классах, членах, наследовании и других элементах кода..

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

  • Описание сборки.

    • Удостоверение (имя, версия, язык и региональные параметры, открытый ключ).

    • Экспортируемые типы.

    • Другие сборки, от которых зависит данная сборка.

    • Необходимые разрешения безопасности.

  • Описание типов.

    • Имя, видимость, базовый класс и реализованные интерфейсы.

    • Члены (методы, поля, свойства, события, вложенные типы).

  • Атрибуты.

    • Дополнительные описательные элементы, изменяющие типы и члены.

Метаданные обеспечивают также следующие преимущества.

  • Файлы с самоописанием.

  • Взаимодействие языков и упрощение разработки на основе компонентов

  • Атрибуты.

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

Изоляция приложений при помощи доменов приложений имеет следующие преимущества.

  • Сбои в одном из приложений не затронут прочие приложения. 

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

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

  • Поведение кода определяется границами приложения, в котором он выполняется. Другими словами, домен приложения предоставляет параметры конфигурации, такие как политики управления версиями приложения, местоположение удаленных сборок, к которым выполняется обращение, и сведения о том, где следует искать локальные сборки, загруженные в домен.

  • Разрешения, предоставленные коду, могут управляться доменом приложения, в котором выполняется этот код.

11. Многопоточное программирование. Виды многопоточности, обеспечение многопоточности в net.Framework, виды блокировки

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

В .NET Framework предлагается несколько возможностей для реализации многопоточности в компонентах. Одной из таких возможностей является применение функциональных возможностей пространства имен System.Threading. Другая возможность — это использование асинхронной модели на основе событий. Компонент BackgroundWorker представляет собой реализацию асинхронной модели; он предоставляет пользователю инкапсулированные в компоненте расширенные возможности, которые обеспечивают простоту использования.

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

Производительность такого приложения на компьютере с несколькими процессорами будет существенно выше. Для выполнения следующих задач в домене приложения необходимо использовать несколько потоков.

  • Взаимодействие по сети с веб-сервером и базой данных.

  • Выполнение операций, занимающих много времени.

  • Разделение задач по приоритетам. Например, поток с высоким приоритетом отвечает за срочные задачи, с низким приоритетом — за все остальные.

  • Сохранение возможности ответа для интерфейса пользователя при выделении времени для фоновой задачи.

Классы в многопоточных приложениях, предоставляемые в MFC, бывают двух видов: объекты синхронизации (CSyncObject, CSemaphore, CMutex, CCriticalSection и CEvent) и объекты доступа синхронизации (CMultiLock и CSingleLock).

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

Чтобы определить, какой класс синхронизации следует использовать, необходимо ответить на следующие вопросы:

  1. Ожидает ли приложение чего-либо перед обращением к ресурсу (например, получения данных с COM-порта перед записью их в файл)?

Если ответ "да", то следует использовать класс CEvent.

  1. Могут ли несколько потоков обращаться к этому ресурсу одновременно (например, если приложение поддерживает возможность открытия одного и того же документа в нескольких окнах одновременно)?

Если ответ "да", то следует использовать класс CSemaphore.

  1. Могут ли несколько приложений использовать этот ресурс (например, если ресурс содержится в библиотеке DLL)?

Если ответ "да", то следует использовать класс CMutex.

Если ответ "нет", то следует использовать класс CCriticalSection.

Класс CSyncObject не используется непосредственно. Он является базовым классом для четырех других классов синхронизации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]