⇒ Библиотека книг по компьютерным технологиям
⇒ ⇒ Разработка Windows-приложений на Microsoft Visual Basic .NET и Microsoft Visual C# .NET. Учебный курс MCAD/MCSD
⇒ ⇒ ⇒ Глава 1. Введение в .NET Framework
⇒ ⇒ ⇒ ⇒ Занятие 6. Сбор мусора
Читать далее: Резюме
Сборщик мусора успешно справляется с циклическими ссылками, которые раньше были одной из наиболее распространенных причин утечки памяти. Рассмотрим следующий пример:
Visual Basic .NET
Class Widget Public ChildWidget As Widget Public Parent As Widget End Class Class aClass Public GrandParent As Widget Sub Demo() Dim Parent As Widget Dim Child As Widget GrandParent = New Widget GrandParent.ChildWidget = New Widget Parent = GrandParent.ChildWidget Parent.ChildWidget = New Widget Child = Parent.ChildWidget Child.Parent = Parent GrandParent = Nothing End Sub End Class
Visual C#
class Widget { public Widget ChildWidget; public Widget Parent; } class aClass { Widget GrandParent; void Demo() { Widget Parent; Widget Child; GrandParent = new Widget(); GrandParent.ChildWidget = new Widget(); Parent = GrandParent.ChildWidget; Parent.ChildWidget = new Widget(); Child = Parent.ChildWidget; Child.Parent = Parent; GrandParent = null; } }
Класс Widget
состоит из полей ChildWidget
и Parent
, в которых хранятся ссылки на объекты Widget
. В этом примере создается экземпляр класса Widget
, и ссылка на него записывает в переменную GrandParent
. Затем этот объект создает еще один экземпляр Widget
и записывает ссылку на него в свое поле ChildWidget
, а также в переменную Parent
. Далее объект Parent
создает третий объект типа Widget
и записывает ссылку на него в свое поле ChildWidget
и в переменную Child
. Наконец, в поле Parent
объекта Child
помещается ссылка на объект Parent
— в результате получается обратная ссылка от объекта Child
на объект Parent
. После сброса переменной GrandParent
(путем записи в нее null
), остается пара объектов, ссылающихся только друг на друга — налицо циклическая ссылка!
При разработке с использованием других платформ циклические ссылки вызывают утечки памяти, которые очень трудно обнаружить, однако сборщик мусора .NET Framework в состоянии отследить и устранить их. Так, если обнаружена пара объектов, ссылающихся только друг на друга, оба этих объекта помечаются как мусор.
Все книги представлены на сайте исключительно для ознакомления с содержанием. |