) Отказ от ответственности: Я знаю, что IDisposable
следует применять при работе с неуправляемыми ресурсами. Остальная часть кода должна быть детерминированной и выполнять , используя (...) {}
(эквивалент try {} finally {Dispose ();}
), чтобы гарантировать очистку в ближайшее время насколько это возможно. Кроме того, GC не будет вызывать Dispose ()
, поэтому рекомендуемый шаблон должен переопределить метод Finalize ()
(в C # с использованием синтаксиса деструктора), который затем вызывает Dispose ()
. GC обычно вызывает Finalize ()
(если только не было вызвано GC.SuppressFinalize ()
).
Проблема: Итак, теперь я понял это , У меня есть странный сценарий, когда я не могу сделать с использованием (SqlConnection ...) {}
из-за неконтролируемого кода. Обычно я могу сделать детерминированный Dispose ()
, но не могу этого гарантировать. Я использовал Reflector для дизассемблирования SqlConnection
и вижу, что он использует Dispose (), но, если я не ослеп, нет финализатора / деструктора ( Finalize ()
или ~ SqlConnection ( )
). Означает ли это, что GC не «очистит» (отправит обратно в пул) соединение в нечетном случае, которого я не могу? Я не смог найти ничего определенного ...