Угадайте, что название должно было предоставить вам достаточное представление о том, что я хочу знать, но я должен подробно его продумать здесь, чтобы вы могли получить точную идею.Объекты, содержащие метод FINALIZE?
Я знаю следующее о методе Finalize
:
Нам нужно создать деструктор в C# с использованием
~Classname
внутри класса. Согласно C#,Finalize
& деструкторы - синонимы (я прочитал его на MSDN, я не знаю, является ли последняя часть утверждения даже правильной или нет).Используется для «изящества освобождения неуправляемых ресурсов».
Это может быть вызвано пользователем (разработчиком) соответственно, или когда приложение работает на память (управляемая куча) или в конце приложения.
Любой объект, имеющий метод
Finalize
, будет добавлен в очередь завершения во время выполнения.
следующее изображение взято из MSDN Magazine Article. Он показывает корни, управляемую кучу (MH), завершающую очередь (FQ) & Freachable Queue (F-RQ). Все это происходит во время выполнения.
Мои вопросы заключаются в следующем:
Как ссылки на, объекты присутствуют в MH добавляются FQ? (Значит, они автоматически добавляются в FQ, потому что они имеют
Finalize
или GC добавляет их, сохраняя их дорожку.)Проводит ли GC через FQ, а также очищает ссылки? (Для ссылок на объекты, которые использует
GC.SuppressFinalization
.)Если MH имеет достаточно памяти для входящих объектов в течение некоторого времени, но в то же время специальная нить в F-RQ делается с
Finalize
методом ссылки (ами), присутствующий в F-RQ, то в этот момент GC будет запускаться специально для F-RQ для восстановления памяти или будет выполняться как для MH & F-RQ, так и будет ли он ждать, пока MH не упадет в памяти?
EDIT:
На вопрос 3: Рассмотрим следующий образ со всеми ссылками на F-RQ не достижимой.
Если есть какие-либо ошибки (ы) в выше указанные вопросы или знания, не стесняйтесь указывать это & объяснение к нему будет очень ценна.
@Peter К ** 'автоматически добавляется потому, что они have Finalize' ** Я имею в виду, если у объекта есть метод ** Finalize' **, он автоматически переходит к ** 'FQ' ** самостоятельно во время выполнения. И ** ** GC добавляет их ** Я имею в виду, что когда объект имеет метод ** Finalize' **, чем во время выполнения, он отслеживается добавлением ** 'GC' ** в **' FQ' * *. – barnes
@ LasseV.Karlsen Не обижайтесь, но, насколько я знаю, ** 'Finalize Queue' ** & **' F-Reachable Queue' ** или ** 'Freachable Queue' ** - это две разные структуры данных , оба контролируются ** 'GC' ** – barnes
@PeterDuniho Во время выполнения, когда' GC' находит любые объекты с 'Finalize', он добавляет его в **' MH' ** и их ссылки на ** 'FQ' * * и для выполнения их ** 'Fianlize' ** метода **' GC' ** добавляет объект в ** 'F-RQ' **. – barnes