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 Dispose
não é obrigatório é incrivelmente fraca. Ele dá dois exemplos para justificar sua opinião.
No primeiro exemplo, ele diz que chamar Dispose
os controles do Windows Forms é entediante e desnecessário em cenários convencionais. No entanto, ele não menciona que, Dispose
na 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.WaitHandle
deve 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 IAsyncResult
próprio não adere às próprias diretrizes publicadas da Microsoft para lidar com IDisposable
objetos. Ou seja, se uma classe contém uma referência a um IDisposable
tipo, a própria classe deve implementar IDisposable
. Se IAsyncResult
essa regra Dispose
fosse 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.
using
construção.