Оглавление:
Определение - что означает финализация?
Finalize - это объектный метод, который содержит код, необходимый для освобождения неуправляемых ресурсов и выполнения операций очистки перед сборкой мусора (GC).
Метод finalize используется для очистки ресурсов, не управляемых .NET. Хотя платформа .NET разработана для освобождения управляемых ресурсов путем неявного выполнения задач управления памятью, ресурсы неуправляемых приложений, такие как файловые дескрипторы и соединения с базами данных, должны быть явно освобождены.
Техопедия объясняет Финализ
Хотя finalize предназначен для неявного вызова GC, метод dispose может быть явно вызван пользовательским кодом для освобождения ресурсов.
Finalize похож на традиционные деструкторы C ++, так как каждый отвечает за освобождение ресурсов объекта. Деструкторы C ++ выполняются немедленно, когда объект выходит из области видимости, тогда как finalize вызывается во время очистки объекта в GC. В C # финализация не может быть напрямую вызвана или переопределена. Если деструктор объявлен, он преобразуется в метод finalize при компиляции программы.
Во время финализации необходимо избегать выделения памяти или вызова виртуальных методов. Область действия finalize должна быть защищена таким образом, чтобы к ней обращались только в пределах одного класса или его производного класса Finalize не должен ссылаться ни на какие другие объекты. В C # вызов finalize напрямую для объекта, отличного от его базового класса, является недопустимой операцией. Код завершения должен быть минимальным без каких-либо вызовов, способных блокировать вызывающий поток. Поскольку finalize вызывается выделенным потоком, его код не должен использовать локальное хранилище потока или какую-либо технику, требующую соответствия потока.
Использование finalize в качестве резервного механизма для освобождения неуправляемой памяти или ресурсов является существенным из-за отсутствия детерминизма и влияния на производительность GC.