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