Las consecuencias de no disponer sus IDisposables pueden variar de un impacto de rendimiento insignificante a estrellar tu aplicación.
El objeto Pincel en su ejemplo será limpiado por el GC cuando así lo desee. Pero su programa no habrá tenido el beneficio de ese poco de memoria adicional que habría obtenido al limpiarlo antes. Si está utilizando muchos objetos Brush, esto puede volverse significativo. El GC también es más eficiente para limpiar objetos si no han estado por mucho tiempo, porque es un colector de basura generacional.
Por otro lado, las consecuencias de no eliminar los objetos de conexión de la base de datos podrían significar que se quede sin conexiones de bases de datos agrupadas muy rápidamente y que la aplicación se bloquee.
O bien utilizar
using (new DisposableThing...
{
...
}
O, si necesita aferrarse a una referencia a un IDisposable en su objeto de su vida útil, implementar IDisposable en su objeto y llamar al método Dispose del IDisposable.
class MyClass : IDisposable
{
private IDisposable disposableThing;
public void DoStuffThatRequiresHavingAReferenceToDisposableThing() { ... }
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
//etc... (see IDisposable on msdn)
}
Esta respuesta tenía por objeto explicar cuándo _necesita_ limpiar sus recursos, no cuando debería, como lo hicieron otros. Por el tono de la pregunta original, supuse que esto era lo que se quería. – Guvante