Сборка "мусора": действительно ли необходимо установить большие объекты в NULL в Расположить методе?

Эй вы попробовали использовать прослушиватель событий child_added?

Детские события

Детские события запускаются в ответ на конкретные операции, которые происходят с дочерними узлами из одной операции, такие как новый дочерний элемент, добавленный с помощью метода push () или ребенок обновляется через метод updateChildren (). Каждый из них может быть полезен для прослушивания изменений в конкретном узле в базе данных.

7
задан Evan Mulawski 8 July 2012 в 01:49
поделиться

6 ответов

Не обычно.

Сборщик "мусора" ищет внедренные объекты, и круговые зависимости не предотвращают набор, если никакой объект не базирован.

Существует протест: если объект A имеет ссылку, чтобы возразить B и возразить, что B располагается, можно хотеть очистить те отношения, или иначе Вы могли закончить с утечкой. Наиболее распространенное место это появляется, находится в обработчиках событий (ссылка от A-> B является тем, которым управляет B, потому что это подписалось на событие на A). В этом случае, если A все еще базирован, B не может быть собран даже при том, что он был расположен.

5
ответ дан 6 December 2019 в 14:12
поделиться

Если класс имеет Расположить метод, лучшая практика должна назвать его. причина позади этого, это Располагает выполнения при вызове, тогда как установка в NULL объекта просто добавляет запись в Завершить очередь в GC, и мы не можем определить, когда GC будет работать.

Нет никакого выигрыша в производительности в реализации Расположить метода на типах, которые используют только управляемые ресурсы (такие как массивы), потому что они автоматически исправлены сборщиком "мусора". Используйте Расположить метод, прежде всего, на управляемых объектах, которые используют собственные ресурсы и на COM-объектах, которые выставляются Платформе.NET. Управляемые объекты, которые используют собственные ресурсы (такие как класс FileStream) реализуют интерфейс IDisposable.

Изящное средство инокороля Располагает, которые приняли, использует конструкцию "использования". Для тех из Вас, кто не может быть знаком с конструкцией, она обеспечивает, средство для implicity вызывают Dispose () на экземпляре, который реализует IDisposable, даже если исключение выдается во время операции. Следующее является примером конструкции использования:

using(DisposableClass dc = new DisposableClass()) 
{ 
   dc.PerformActionOnUmanagedResources(); 
   dc.PerformAnotherActionOnUmanagedResources(); 
} 

В предыдущем примере, если исключение было выдано в PerformActionOnUmanagedResources () метод, хотя PerformAnotherActionOnUmanagedResources () метод не будет обработан, блок использования будет все еще implicity вызывать метод Dispose на dc обеспечение понимания любых неуправляемых ресурсов.

5
ответ дан 6 December 2019 в 14:12
поделиться

что Вы подразумеваете под "большим объектом"?

Необходимо, по крайней мере, звонить, Располагают () на любом участнике, реализующем IDisposable, все же.

1
ответ дан 6 December 2019 в 14:12
поделиться

Цель расположить метода состоит в том, чтобы высвободить все средства, связанные с Вашим классом, и класс родителя путем вызова базового класса располагает метод. Имейте чтение этой ссылки, это должно сделать вещи немного более ясными:

http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx

3
ответ дан 6 December 2019 в 14:12
поделиться

Это не необходимо, как другие указали, но это - хорошая практика и помогает с отладкой.

После того как объект закончился с указателем, он использует затем установку в NULL, он помогает предотвратить повторное использование того объекта позже (Вы получите исключение нулевой ссылки).

Та же логика относится к установке в NULL членских указателей в деструкторах C++, после того как Вы удалили их. Нет никакой потребности сделать это, но это помогает с поиском и устранением неисправностей позже.

1
ответ дан 6 December 2019 в 14:12
поделиться

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

0
ответ дан 6 December 2019 в 14:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: