Su pregunta sobre si debe llamar siempre o no Dispose
suele 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 Dispose
no es obligatorio es increíblemente débil. Da dos ejemplos para justificar su opinión.
En el primer ejemplo, dice que llamar Dispose
a los controles de Windows Forms es tedioso e innecesario en los escenarios principales. Sin embargo, no menciona que, en Dispose
realidad, 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.WaitHandle
debe 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 IAsyncResult
mismo no se adhiere a las pautas publicadas por Microsoft para tratar con IDisposable
objetos. Es decir, si una clase tiene una referencia a un IDisposable
tipo, la clase misma debería implementarla IDisposable
. Si se IAsyncResult
sigue esa regla, entonces su propio Dispose
mé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.
using
construcción.