Sua pergunta sobre se você deve sempre ligar ou não Disposeé geralmente um debate acalorado. Veja este blog para uma perspectiva interessante de indivíduos respeitados na comunidade .NET.
Pessoalmente, acho que a posição de Jeffrey Richter de que pagar Disposenão é obrigatório é incrivelmente fraca. Ele dá dois exemplos para justificar sua opinião.
No primeiro exemplo, ele diz que chamar Disposeos controles do Windows Forms é entediante e desnecessário em cenários convencionais. No entanto, ele não menciona que, Disposena verdade, é chamado automaticamente por contêineres de controle nesses cenários principais.
No segundo exemplo, ele afirma que um desenvolvedor pode assumir incorretamente que a instância de IAsyncResult.WaitHandledeve ser descartada de forma agressiva sem perceber que a propriedade inicializa preguiçosamente o identificador de espera, resultando em uma penalidade de desempenho desnecessária. Mas, o problema com este exemplo é que o IAsyncResultpróprio não adere às próprias diretrizes publicadas da Microsoft para lidar com IDisposableobjetos. Ou seja, se uma classe contém uma referência a um IDisposabletipo, a própria classe deve implementar IDisposable. Se IAsyncResultessa regra Disposefosse seguida, seu próprio método poderia tomar a decisão sobre qual de seus membros constituintes precisa ser eliminado.
Portanto, a menos que alguém tenha um argumento mais convincente, continuarei no campo "sempre ligue para o descarte", com o entendimento de que haverá alguns casos marginais que surgem principalmente de más escolhas de design.
usingconstrução.