Что такое финализатор и почему не следует освобождать соединения с БД только через него?

Финализатор — недетерминированная резервная очистка объекта перед освобождением его памяти GC. Соединения с БД нужно закрывать через Dispose/using, а не ждать финализации.

Короткий ответ

Что ответить на собеседовании

Финализатор — недетерминированная резервная очистка объекта перед освобождением его памяти GC. Соединения с БД нужно закрывать через Dispose/using, а не ждать финализации.

Подробный разбор

Ответ с пояснениями

Финализатор — недетерминированная резервная очистка объекта перед освобождением его памяти GC. Соединения с БД нужно закрывать через Dispose/using, а не ждать финализации.

Момент сборки мусора не совпадает с окончанием запроса. Ожидание финализатора может надолго удержать соединение, транзакцию или ресурс пула; при завершении процесса финализатор вообще нельзя считать гарантированной очисткой.

Используйте using или await using для поддерживающего IAsyncDisposable провайдера. Dispose часто возвращает соединение в пул, а не обязательно закрывает физическое TCP-соединение. Финализаторы предназначены прежде всего для страховки владения неуправляемыми ресурсами; предпочтительны уже готовые безопасные обёртки вроде SafeHandle.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее