許多GDI +類實現了IDisposable,但我不確定何時應該調用Dispose。對於我使用new
創建的實例或者使用像Graphics.CreateGraphics
這樣的靜態方法,很明顯。但是屬性獲得者返回的對象又如何?我經常寫這樣的代碼:你什麼時候處理GDI +資源?
var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
g.Clip = rectRegion;
// draw something
}
g.Clip = oldRgn;
我應該處理後oldRgn
?如果我不記得,我的記憶分析器告訴我有沒有未處理的實例。而看着反射器實施至少證實,吸氣明顯地創造一個新的實例每次它的調用時間:
// 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;
}
我無法找到有關在MSDN什麼,文檔中的樣本似乎永遠處置任何東西。
嘗試將「g.Clip = oldRgn」移動到使用塊中。 – 2010-03-02 09:31:47