Ваше запитання щодо того, чи варто завжди телефонувати, Dispose
чи ні, зазвичай - гаряча дискусія. Дивіться це блозі про цікаву перспективу від шанованих людей у .NET-спільноті.
Особисто я вважаю позицію Джефрі Ріхтера, що закликає Dispose
не є обов'язковими, надзвичайно слабка. Він наводить два приклади, щоб обгрунтувати свою думку.
У першому прикладі він каже, що Dispose
запуск елементів керування Windows Forms є стомлюючим та непотрібним у основних сценаріях. Однак він не зазначає, що Dispose
насправді викликається автоматично контейнерами управління в цих основних сценаріях.
У другому прикладі він зазначає, що розробник може помилково припустити, що екземпляр з нього IAsyncResult.WaitHandle
слід агресивно розпоряджатися, не розуміючи, що властивість ліниво ініціалізує ручку очікування, що призводить до непотрібного покарання за виконання. Але проблема цього прикладу полягає в тому, що IAsyncResult
сам по собі не дотримується власних опублікованих інструкцій Microsoft щодо поводження з IDisposable
об'єктами. Тобто, якщо клас містить посилання на IDisposable
тип, то сам клас повинен реалізувати IDisposable
. Якщо IAsyncResult
дотримуватися цього правила, то його власнеDispose
метод може прийняти рішення щодо того, хто з його складових потребує розпорядження.
Тож якщо у когось немає більш переконливого аргументу, я збираюся залишитися в таборі "завжди дзвонити", з розумінням того, що трапляються деякі випадкові випадки, які виникають з-за поганого дизайнерського вибору.
using
конструкції.