Иллюстрированный самоучитель по Architecture .NET

Программа-пример. Резюме.

Программа GarbageCollection (Сборка мусора) иллюстрирует использование рассмотренных выше методов класса GC (Сборщик мусора). Пример несколько искусственен. С его помощью просто иллюстрируется продолжительность жизни объекта и эффект использования различных методов класса GC (Сборщик мусора). Объекты, для которых выделяется память, принадлежат классу Member (Элемент). Этот класс имеет свойство типа String (Строка) под названием Name (Имя).

Операторы вывода использованы в конструкторе, деструкторе и методе Dispose (Освободить ранее выделенную область памяти). Класс Committee (Комитет) поддерживает список массивов, состоящий из экземпляров класса Member (Элемент). Метод RemoveMember просто удаляет элемент из списка массивов. Метод DisposeMember также вызывает метод Dispose (Освободить ранее выделенную область памяти) для вычеркиваемого из списка элемента. Метод ShowGenerations отображает номер поколения каждого объекта класса Member (Элемент). Испытательная программа GarbageCollection.h использует эти классы; она показывает результаты различных размещений (распределений) и освобождений памяти при использовании методов класса GC (СБОРЩИК МУСОРА). Код и вывод должны быть весьма просты для понимания.

Вся память распределяется локально в методе DemonstrateGenerations. После того, как указанный метод завершит свою работу, и его локальная память стает недоступной, мы явно вызываем GC::Collect (Сборщик мусора::Собрать). Это приводит к вызову соответствующих деструкторов, прежде чем вся прикладная область прекратит свое существование. Таким образом мы избегаем возможного случайного исключения в закрывающемся потоке, когда метод WriteLine вызывается в методе завершения. Этот самый прием мы уже видели в более ранних примерах.

Резюме

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

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

Еще один аспект модели приложений .NET – распространяющееся использование атрибутов, которые могут быть просто добавлены к исходному коду и сохранены вместе с метаданными. Мы видели примеры использования атрибутов для сериализации и синхронизации. Научились также реализовывать и использовать самостоятельно определяемые атрибуты.

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.