![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| gambit |
|
|||
![]() Эксперт ![]() ![]() ![]() Награды: 1 Профиль Группа: Комодератор Сообщений: 1359 Регистрация: 25.6.2006 Где: я? Репутация: 5 Всего: 40 |
Гдето слышал (ну присниться не могло) что если объект попал во второе поколение GC и у него есть финализатор, то объект не будет удален до завершения программы, даже если он не нужен. Кто, что слышал по этому поводу?
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Фигня. При создании объекта с finilizer-ом .NET добавляет его указатель в finilization list. Перед удалением Garbage Collector ищет указатель на объект в finilizer list, и если он есть - объект не удаляется, а указатель на него помещается в так называемый f-reachable queue. Отдельный поток (может и не один) вызывает finilizer-ы для объектов, находящихся в f-reachable queue. После вызова finilizer-а поток его оттуда удаляет и теперь уже наш объект ни в чем не нуждается и уже при следующем вызове сборщика мусора удалится навсегда. Разве что, если в finilizer-е не сохранить указатель на объект в какой нибудь статический указатель. Это сообщение отредактировал(а) azesmcar - 20.8.2010, 13:27 |
|||
|
||||
| gambit |
|
|||
![]() Эксперт ![]() ![]() ![]() Награды: 1 Профиль Группа: Комодератор Сообщений: 1359 Регистрация: 25.6.2006 Где: я? Репутация: 5 Всего: 40 |
я умом понимаю, что фигня, но откуда то я это взял. Я не отрицаю, может из какой ниб левой статейки прыщавого школьника, но где то читал. Типа все ок, но если объект во втором поколении, то происходит какая то лажа с его удалением. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
gambit
Ну может хотя бы подскажешь где? А то сложно отвечать на то, не знаю что можно проверить
finilizer вызывается, правда это конечно не значит, что объект удален из памяти, но мы же не берем в расчет баги Это сообщение отредактировал(а) azesmcar - 20.8.2010, 13:58 |
|||
|
||||
| gambit |
|
|||
![]() Эксперт ![]() ![]() ![]() Награды: 1 Профиль Группа: Комодератор Сообщений: 1359 Регистрация: 25.6.2006 Где: я? Репутация: 5 Всего: 40 |
так вопрос закрыт. Скорее всего это из серии "слышал звон". Если объект доживает до 2 поколения без вызова финализатора, то до удаления должно проити две сборки мусора в 2 поколении, чего чаще всего не происходит. Может я на основе этого сделал вывод, что он не будет удален, а может и правда где ниб. прочитал
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 6 Всего: 211 |
Я тоже предполагал что-то вроде этого, но это не вяжется с finilizer-ом, он тут не причем, это утверждение верно и без finilizer-а, просто finilizer увеличит жизнь объекта на еще одну сборку. Автоматическая сборка мусора начинается тогда, когда в 0-м поколении больше нет места, причем начинается чистка с поколения 0, и если все хорошо - до поколения 1 дело не дойдет, что уж тут говорить про поколение 2, туда garbage collector вообще редко заглядывает, на практике в некоторых случаях этот объект может и не будет удален до конца работы программы, но теоретически его удалению ничего не препятствует. Это сообщение отредактировал(а) azesmcar - 20.8.2010, 14:18 |
|||
|
||||
| gambit |
|
|||
![]() Эксперт ![]() ![]() ![]() Награды: 1 Профиль Группа: Комодератор Сообщений: 1359 Регистрация: 25.6.2006 Где: я? Репутация: 5 Всего: 40 |
вот на основе этого, как то я и отрекся от мысли спасибо. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |