Su pregunta sobre si debe llamar siempre o no Disposesuele ser un debate acalorado. Consulte este blog para obtener una perspectiva interesante de personas respetadas en la comunidad .NET.
Personalmente, creo que la posición de Jeffrey Richter de que llamar Disposeno es obligatorio es increíblemente débil. Da dos ejemplos para justificar su opinión.
En el primer ejemplo, dice que llamar Disposea los controles de Windows Forms es tedioso e innecesario en los escenarios principales. Sin embargo, no menciona que, en Disposerealidad, los contenedores de control lo llaman automáticamente en esos escenarios convencionales.
En el segundo ejemplo, afirma que un desarrollador puede asumir incorrectamente que la instancia de IAsyncResult.WaitHandledebe eliminarse de forma agresiva sin darse cuenta de que la propiedad inicializa perezosamente el identificador de espera, lo que genera una penalización de rendimiento innecesaria. Pero, el problema con este ejemplo es que el IAsyncResultmismo no se adhiere a las pautas publicadas por Microsoft para tratar con IDisposableobjetos. Es decir, si una clase tiene una referencia a un IDisposabletipo, la clase misma debería implementarla IDisposable. Si se IAsyncResultsigue esa regla, entonces su propio Disposemétodo podría tomar la decisión sobre cuál de sus miembros constituyentes necesita eliminarse.
Entonces, a menos que alguien tenga un argumento más convincente, me quedaré en el campo de "siempre llamar a Dispose" con el entendimiento de que habrá algunos casos marginales que surjan principalmente de malas elecciones de diseño.
usingconstrucción.