Muchas clases de GDI + implementan IDisposable, pero no estoy seguro de cuándo llamar a Dispose. Está claro para las instancias que creo con new
o métodos estáticos como Graphics.CreateGraphics
. Pero, ¿qué ocurre con los objetos que devuelven los compradores de propiedades? A menudo escribo código como este:¿Cuándo dispone de los recursos de GDI +?
var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
g.Clip = rectRegion;
// draw something
}
g.Clip = oldRgn;
se supone que voy a disponer oldRgn
después de eso? Mi perfil de memoria me dice que hay instancias no expuestas si no lo hago. Y mirando a la puesta en práctica en el reflector al menos confirma que el captador 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 acerca de que en el MSDN, y las muestras en la documentación nunca parecen para deshacerse de cualquier cosa
Intenta mover "g.Clip = oldRgn" en el bloque de uso. –