Очистка двойного связанного списка

Как насчет этого это:

StackFrame frame = new StackFrame(1);
frame.GetMethod().Name; //Gets the current method name

MethodBase method = frame.GetMethod();
method.DeclaringType.Name //Gets the current class name
5
задан CasperT 16 October 2009 в 10:22
поделиться

3 ответа

Короткий ответ - да, сборка мусора очистит все узлы связанного списка, при условии, что ничто внешнее не содержит ссылки на них.

Самый простой способ проверить - добавить финализатор в объект узла связанного списка, который выводит некоторый журнал. Обратите внимание, что вы не можете быть уверены в том, что сборщик мусора запускается (без его принудительного запуска через GC.Collect ()), поэтому вы не увидите вызываемого финализатора, как только вы вызовете метод Clear ().

«эффекта домино» не должно быть; не имеет значения, удерживаются ли ссылки на объект, или ссылки могут быть прослежены до стека или статического объекта. Таким образом, если несколько объектов ссылаются друг на друга, но ничто не относится к ним, тогда все они будут собраны мусором одновременно.

7
ответ дан 18 December 2019 в 14:48
поделиться

Если только объекты в коллекции не нужно удалять,

4
ответ дан 18 December 2019 в 14:48
поделиться

Я визуализирую эффект домино

GC работает не так.

GC сначала помечает все как «мертвые», затем, начиная с корневых объектов, он просматривает все объекты, на которые они ссылаются, помечая каждый как «живой».

Поскольку на ваш список больше не ссылаются какие-либо корневые объекты (или дочерние объекты), он будет слева помечено как «мертвые».

Второй проход затем освобождает «мертвые» объекты.

Я сомневаюсь, что вы можете предположить в финализаторе, что какие-либо объекты с любой стороны в списке не были собраны первыми, http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

2
ответ дан 18 December 2019 в 14:48
поделиться
Другие вопросы по тегам:

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