许多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;
Run Code Online (Sandbox Code Playgroud)
我应该oldRgn在那之后处理吗?我的内存分析器告诉我,如果不这样做,会有一些不相关的实例.在反射器中查看实现至少可以确认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;
}
Run Code Online (Sandbox Code Playgroud)
我在MSDN中找不到任何相关内容,文档中的示例似乎从未处理过任何内容.