Wann entsorgen Sie GDI + -Ressourcen?

Viele GDI + -Klassen implementieren IDisposable, aber ich bin nicht sicher, wann ich Dispose aufrufen soll. Es ist klar für Instanzen, mit denen ich erstellenew oder statische Methoden wieGraphics.CreateGraphics. Aber was ist mit Objekten, die von Property Getters zurückgegeben werden? Ich schreibe oft Code wie folgt:

var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
    g.Clip = rectRegion;
    // draw something
}
g.Clip = oldRgn;

Soll ich entsorgen?oldRgn nachdem? Mein Speicherprofiler teilt mir mit, dass es nicht verfügbare Instanzen gibt, wenn ich dies nicht tue. Ein Blick auf die Implementierung in Reflector bestätigt zumindest, dass der Getter anscheinend bei jedem Aufruf eine neue Instanz erstellt:

// 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;
}

Ich konnte nichts darüber im MSDN finden, und die Beispiele in der Dokumentation scheinen nie etwas zu entsorgen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage