¿Cuándo dispone los recursos de GDI +?
Muchas clases de GDI + implementan IDisposable, pero no estoy seguro de cuándo debo llamar a Dispose. Está claro para las instancias que creo connew
o métodos estáticos comoGraphics.CreateGraphics
. Pero, ¿qué pasa con los objetos que devuelven los captadores de propiedades? A menudo escribo código como este:
var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
g.Clip = rectRegion;
// draw something
}
g.Clip = oldRgn;
¿Se supone que debo disponer?oldRgn
¿después de esto? Mi generador de perfiles de memoria me dice que hay instancias no expuestas si no lo hago. Y mirar la implementación en el reflector al menos confirma que el getter aparentemente crea una nueva instancia cada vez que se invoca:
// Graphics.Clip code from Reflector:
public Region get_Clip()
{
Region wrapper = new Region();
int status = SafeNativeMethods.Gdip.GdipGetClip(new HandleRef(this, this.NativeGraphics), new HandleRef(wrapper, wrapper.nativeRegion));
if (status != 0)
{
throw SafeNativeMethods.Gdip.StatusException(status);
}
return wrapper;
}
No pude encontrar nada sobre eso en el MSDN, y las muestras en la documentación nunca parecen deshacerse de nada.