Сборка мусора - что ожидать? - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть 2 list с, где оба хранят объекты одного типа. Давайте назовем это TypeX.

Когда я хочу добавить новый объект TypeX, я бы создал новый объект TypeX, а затем использовал Add до list1 и до list2. Таким образом, каждый список будет иметь ссылку на фактический объект. (Надеюсь, я прямо здесь).

Тогда я бы хотел удалить объект. Я бы использовал Remove для обоих list с. Таким образом, ссылка на объект была удалена ...

Но что происходит с самим объектом? GC очистит это? Должен ли я удалить его как-нибудь еще?

Ответы [ 5 ]

3 голосов
/ 15 декабря 2011

Проще говоря, сборщик мусора собирает каждый объект, на который не ссылается ни один другой объект.

Итак, если вы удалите свой объект из обоих списков и не сохраните его где-либо еще, он в конечном итоге будет собираться мусором.

0 голосов
/ 15 декабря 2011

Хорошая вещь о наличии GC в том, что вам действительно не нужно беспокоиться о том, что вы беспокоитесь сейчас.

0 голосов
/ 15 декабря 2011

Если больше нет ссылок на объект, GC будет собирать объект, когда сочтет это необходимым. Обычно это происходит, когда увеличивается нагрузка на память или когда вы даете ей подсказку для запуска (вам обычно это не нужно).

Эта ссылка может быть полезна: http://msdn.microsoft.com/en-us/library/ms973837.aspx

0 голосов
/ 15 декабря 2011

Пока в этих списках содержатся только ссылки на объект, GC удалит его после того, как вы удалите его из обоих списков.

0 голосов
/ 15 декабря 2011

Короткий ответ - да, GC очистит его. Однако, если вы хотите сделать это более эффективным, я бы добавил интерфейс IDisposable к вашему объекту, чтобы GC избавился от объекта аккуратно, как только исчезнут все ссылки на него.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...