许多gdi+类实现IDisposable,但我不确定何时应该调用Dispose。很明显,我创建的实例
new
或静态方法
Graphics.CreateGraphics
. 但是属性getter返回的对象呢?我经常这样写代码:
var oldRgn = g.Clip;
using (var rectRegion = new Region(rectangle))
{
g.Clip = rectRegion;
// draw something
}
g.Clip = oldRgn;
我应该处理吗
oldRgn
之后?我的内存分析器告诉我,如果没有的话,会有未解决的实例。查看Reflector中的实现,至少可以确认getter每次调用时都会创建一个新实例:
// 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中找不到任何相关信息,文档中的样本似乎从未处理过任何内容。