- •1. Сборщик мусора и управление ресурсами
- •2. Жизненный цикл объектов
- •3. Неуправляемый код и указатели
- •4. Строки и строковый пул
- •5. Обобщенные типы, ограничения в параметрах обобщенных типов, типы допускающие null значение
- •6. Тип Type и пространство System.Reflection
- •7. Создание объектов с помощью рефлексии, вызов методов объектов средствами рефлексии
- •8. Атрибуты, жизненный цикл объекта атрибута
- •9. Специальные атрибуты net.Framework и ограничения пользовательских атрибутов
- •10. Метаданные сборок, структура сборок, домены приложений
- •11. Многопоточное программирование. Виды многопоточности, обеспечение многопоточности в net.Framework, виды блокировки
- •12. Класс Thread, логические и физические потоки выполнения, жизненный цикл потока выполнения
- •13. Класс монитора, конструкция lock()
- •14. Атомарная синхронизация и класс Interlocked
- •15. Класс ReaderWriterLock, пул потоков
- •16. Классы WaitHandle и производные от него: ManualResetEvent, AutoResetEvent, Mutex
- •17. Высокоуровневые средства распараллеливания задач, класс Task
- •18. Свойства и методы класса Task
- •19. Делегаты, цепочка вызова
- •Групповая адресация
- •20. Асинхронный вызов с помощью объекта делегата
- •IAsyncResult
- •21. События, обратный вызов, типовая схема реализации события
- •22. Лямбда-выражения, замыкание лямбда-выражений
- •23. Деревья выражений, типы деревьев. Создание деревьев выражений
- •24. Технология ado.Net, архитектура, модель с постоянным соединением и с рассоединением
- •Linq to DataSet
- •Linq to sql
- •Платформа ado.Net Entity Framework
- •Службы wcf Data Services
- •25)Понятие поставщика данных и его составные части в ado.Net. Класс соединения, итератора, команды.
- •26. Технология объектно-реляционного связывания, персистентные объекты, на примере одной из технологии (Linq to sql, Linq to Entities, nHibernate)
- •Entity Framework
- •27. Linq to Objects: архитектура технологии и возможности, понятие итератора, создание Linq запросов
- •28. Средства распараллеливания выполнения запросов plinq.
- •29. Основы wcf. Основные понятия, применение. Контракты данных, привязки. Архитектура сервис-ориентированных систем.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •30. Структура проекта с использованием wcf сервисов. Интерфейсы сервиса, атрибуты для обозначения методов сервиса и контрактов данных.
- •1) Библиотека с интерфейсом
- •2) Сервер – консольное приложение
- •3) Клиент – консольное приложение
- •31. Методы и свойства прокси-объекта на стороне клиента.
- •32. Развертывание wcf сервисов.
10. Метаданные сборок, структура сборок, домены приложений
Метаданные — это данные в двоичном формате с описанием программы, хранящиеся либо в переносимом исполняемом (PE) файле среды CLR, либо в памяти. Когда код компилируется в PE-файл, метаданные помещаются в одну часть файла, а код преобразуется в MSIL и помещается в другую часть файла. В метаданных описываются все типы и члены, определенные или используемые в модуле или сборке. При исполнении кода среда выполнения загружает метаданные в память и обращается к ним для получения сведений о классах, членах, наследовании и других элементах кода..
В метаданных в независимом от языка виде описываются все типы и члены, определенные в коде. В метаданных хранятся следующие сведения.
Описание сборки.
Удостоверение (имя, версия, язык и региональные параметры, открытый ключ).
Экспортируемые типы.
Другие сборки, от которых зависит данная сборка.
Необходимые разрешения безопасности.
Описание типов.
Имя, видимость, базовый класс и реализованные интерфейсы.
Члены (методы, поля, свойства, события, вложенные типы).
Атрибуты.
Дополнительные описательные элементы, изменяющие типы и члены.
Метаданные обеспечивают также следующие преимущества.
Файлы с самоописанием.
Взаимодействие языков и упрощение разработки на основе компонентов
Атрибуты.
Домен приложения — это механизм, реализованный в .NET, который позволяет запустить группу приложений в одном процессе, обеспечивая относительную изоляцию их друг от друга, в то же время позволяя им взаимодействовать друг с другом значительно быстрее, чем в случае отдельных процессов. Домен полностью изолирует используемые в его рамках ресурсы как от других доменов того же процесса так и от доменов других процессов.
Изоляция приложений при помощи доменов приложений имеет следующие преимущества.
Сбои в одном из приложений не затронут прочие приложения.
Можно прекратить выполнение отдельных приложений, не останавливая процесс целиком. Использование доменов приложений позволяет выгружать код, используемый отдельным приложением.
Код, используемый одним приложением, не может иметь непосредственного доступа к коду или ресурсам другого приложения. В среде CLR эта изоляция реализована за счет запрета прямых вызовов между объектами в различных доменах приложений. Объекты, передаваемые от домена к домену, копируются или взаимодействуют через прокси.
Поведение кода определяется границами приложения, в котором он выполняется. Другими словами, домен приложения предоставляет параметры конфигурации, такие как политики управления версиями приложения, местоположение удаленных сборок, к которым выполняется обращение, и сведения о том, где следует искать локальные сборки, загруженные в домен.
Разрешения, предоставленные коду, могут управляться доменом приложения, в котором выполняется этот код.
11. Многопоточное программирование. Виды многопоточности, обеспечение многопоточности в net.Framework, виды блокировки
Многопоточность, или свободное создание потоков, — это способность приложения одновременно выполнять несколько потоков операций. Примером многопоточного приложения может служить программа, которая в одном потоке получает входные данные от пользователя, во втором — выполняет сложные вычисления, а в третьем — обновляет базу данных. В однопотоковом приложении пользователь может потратить некоторое время на ожидание завершения вычислений или обновления базы данных. В многопоточном приложении эти процессы могут выполняться в фоновом режиме, поэтому время не теряется.
В .NET Framework предлагается несколько возможностей для реализации многопоточности в компонентах. Одной из таких возможностей является применение функциональных возможностей пространства имен System.Threading. Другая возможность — это использование асинхронной модели на основе событий. Компонент BackgroundWorker представляет собой реализацию асинхронной модели; он предоставляет пользователю инкапсулированные в компоненте расширенные возможности, которые обеспечивают простоту использования.
Использование более одного потока является наиболее мощным средством увеличения быстроты ответа системы на действия пользователя, а также средством обработки данных, необходимых для одновременного выполнения задачи. Для обработки данных в фоновом режиме на компьютере с одним процессором этот эффект достигается путем использования небольших периодов времени между событиями пользователя. Например, пока пользователь вносит изменения в электронную таблицу, другой поток в данном приложении может пересчитывать другие части этой таблицы.
Производительность такого приложения на компьютере с несколькими процессорами будет существенно выше. Для выполнения следующих задач в домене приложения необходимо использовать несколько потоков.
Взаимодействие по сети с веб-сервером и базой данных.
Выполнение операций, занимающих много времени.
Разделение задач по приоритетам. Например, поток с высоким приоритетом отвечает за срочные задачи, с низким приоритетом — за все остальные.
Сохранение возможности ответа для интерфейса пользователя при выделении времени для фоновой задачи.
Классы в многопоточных приложениях, предоставляемые в MFC, бывают двух видов: объекты синхронизации (CSyncObject, CSemaphore, CMutex, CCriticalSection и CEvent) и объекты доступа синхронизации (CMultiLock и CSingleLock).
Классы синхронизации используются в случае, если необходимо управлять доступом к ресурсу для обеспечения его целостности. Классы доступа к синхронизации используются для получения доступа к контролируемым ресурсам. В данном разделе описываются случаи использования каждого из этих классов.
Чтобы определить, какой класс синхронизации следует использовать, необходимо ответить на следующие вопросы:
Ожидает ли приложение чего-либо перед обращением к ресурсу (например, получения данных с COM-порта перед записью их в файл)?
Если ответ "да", то следует использовать класс CEvent.
Могут ли несколько потоков обращаться к этому ресурсу одновременно (например, если приложение поддерживает возможность открытия одного и того же документа в нескольких окнах одновременно)?
Если ответ "да", то следует использовать класс CSemaphore.
Могут ли несколько приложений использовать этот ресурс (например, если ресурс содержится в библиотеке DLL)?
Если ответ "да", то следует использовать класс CMutex.
Если ответ "нет", то следует использовать класс CCriticalSection.
Класс CSyncObject не используется непосредственно. Он является базовым классом для четырех других классов синхронизации.
