⇒ Библиотека книг по компьютерным технологиям
⇒ ⇒ Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD/MCSD
⇒ ⇒ ⇒ Глава 1. Введение в .NET Framework
Читать далее: Циклические ссылки
Схема автоматического управления памятью, применяемая в .NET Framework, получила название сбор мусора (garbage collection). Этот механизм позволяет отслеживать неиспользуемые объекты и освобождать занятую ими память совершенно без участия приложения. На этом занятии вы узнаете, как работает механизм сбора мусора.
Изучив материал этого занятия, вы сможете:
Продолжительность занятия — около 15 минут.
В .NET Framework применяется автоматическое управление памятью, то есть .NET Framework автоматически утилизирует память неиспользуемых объектов. Этот процесс называется сбором мусора. Рассмотрим следующий пример:
Visual Basic .NET
Sub GarbageCollectionExample1() Dim myWidget As New Widget End Sub
Visual C#
void GarbageCollectionExample1() { Widget myWidget = new Widget(); }
Когда эта процедура завершится, переменная myWidget
выйдет из области видимости, после чего на нее не будет ссылаться ни одна из переменных приложения. Сборщик мусора непрерывно проверяет дерево ссылок в фоновом режиме и определяет объекты, на которые больше нет ссылок. Обнаружив такой объект (например, myWidget
из нашего примера), сборщик мусора удаляет его и освобождает занятую им память.
Поскольку сбор мусора работает постоянно, не обязательно явно уничтожать объекты, как только они станут ненужными. Обычно сборщик мусора работает в низкоприоритетном потоке, который исполняется, пока процессор не занят более важными задачами, но при дефиците памяти приоритет этого потока повышается. В результате память освобождается быстрее, пока не исчезнет ее дефицит, тогда приоритет потока сборщика мусора вновь снижается.
Подобный подход к освобождению памяти, получивший название недетерминированного, призван обеспечить максимальную производительность приложений и предоставить им окружение, более устойчивое к ошибкам. Однако за эти удобства приходится расплачиваться неопределенностью. Невозможно с уверенностью сказать, когда именно будет уничтожен тот или иной объект, то есть нельзя контролировать момент вызова деструктора класса (в C#) или метода Visual Basic .NET, подготавливающего объекты к уничтожению. В силу этих причин в деструкторе не должно быть кода, который необходимо исполнить в заданное время. Классы, удерживающие дефицитные ресурсы, обычно вызывают метод Dispose()
, гарантированно освобождающий эти ресурсы, как только объект становится ненужным.
Все книги представлены на сайте исключительно для ознакомления с содержанием. |