Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Циклические ссылки
7 февраля 2009

Сборщик мусора успешно справляется с циклическими ссылками, которые раньше
были одной из наиболее распространенных причин утечек памяти. Рассмотрим сле-
дующий пример:
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;
}
i
Класс Widget состоит из полей ChildWidget и Parent, в которых хранятся ссылки
на объекты Widget. В этом примере создается экземпляр класса Widget, и ссылка на
него записывается в переменную GrandParent. Затем этот объект создает еще один
экземпляр Widget и записывает ссылку на него в свое поле ChildWidget, а также в
переменную Parent. Далее объект Parent создает третий объект типа Widget и запи-
сывает ссылку на него в свое поле ChildWidget и в переменную Child. Наконец, в
поле Parent объекта Child помещается ссылка на объект Parent — в результате полу-
чается обратная ссылка от объекта Child на объект Parent. После сброса переменной
GrandParent (путем записи в нее null), остается пара объектов, ссылающихся только
друг на друга — налицо циклическая ссылка!
При разработке с использованием других платформ циклические ссылки вызы-
вают утечки памяти, которые очень трудно обнаружить, однако сборщик мусора
.NET Framework в состоянии отследить и устранить их. Так, если обнаружена пара
объектов, ссылающихся только друг на друга, оба этих объекта помечаются как
мусор.

Теги: .NET

Статьи по теме:

Применение типов данных
Свойства, доступные только для чтения или только для записи
Вызов функций Windows API
CBitmapEx – C++-класс для работы с BMP
Создание конфигурационного файла
Parsing Expression Grammar Support for C# 3.0 Part 1 – PEG Lib and Parser Generator
Извлечение и обновление данных с помощью объектов DataAdapter и DataSet
Автоматизация разработки
Преобразование типов
Создание элемента управления
Добавление формы к проекту
Применение событий формы
Специальные возможности и элементы управления Windows Forms
Создание формы
Свойства-наборы
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Циклические ссылки. Регион сайта: Москва и Санкт-Петербург