Финализация чрезвычайно полезна в качестве двойной проверки.Если сбой или чей-то плохой код не удаляет ваш объект до того, как он выходит из области видимости, гарантируйте, что его ресурсы будут высвобождены в финализаторе.
Вы можете сделать некоторую изощренную работу в вашем диспетчера, хотя бы позвонив GC.SuppressFinalize(this)
, который позволит вам написать метод, который будет работать в обеих ситуациях, и даст вам гарантию, что код будет работать хорошо.
Вы могли бы даже запустить MDA, если бы писали каркас, чтобы напомнить людям, чтоони должны утилизировать ваш объект.
Наказатель финализатора в основном состоит в том, что вы помещаете свой объект в очередь уровня 2, что требует больше времени для запуска.Если вы постоянно используете объекты, и они завершают работу, это может привести к тому, что коллекция уровня 2 будет запускаться чаще, чем просто для запуска потоков финализатора.