Molte classi GDI + implementano IDisposable, ma non sono sicuro quando dovrei chiamare Dispose. È chiaro per istanze che creo con new
o metodi statici come Graphics.CreateGraphics
. Ma per quanto riguarda gli oggetti che vengono restituiti dai getter di proprietà? Mi capita spesso di scrivere il codice in questo modo:Quando si smaltiscono le risorse GDI +?
var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
g.Clip = rectRegion;
// draw something
}
g.Clip = oldRgn;
faccio a smaltire oldRgn
dopo? Il mio profilo di memoria mi dice che ci sono istanze non disposte se non lo faccio. E guardando l'attuazione riflettore almeno conferma che il getter apparentemente crea una nuova istanza ogni volta che viene invocato:
// 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;
}
non ho trovato nulla in MSDN, ei campioni nella documentazione non sembrano mai per smaltire qualsiasi cosa.
Provare a spostare "g.Clip = oldRgn" nel blocco using. –