gpt4 book ai didi

.net - 您何时处置GDI +资源?

转载 作者:行者123 更新时间:2023-12-04 04:36:12 27 4
gpt4 key购买 nike

许多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吗?我的内存分析器告诉我,如果没有,则存在未处理的实例。并查看反射器中的实现,至少可以确认每次调用时,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中找不到关于此的任何信息,并且文档中的示例似乎从未处理任何事情。

最佳答案

通常,如果类为IDisposable,则在不需要该对象时必须调用.Dispose方法。

此外,MSDN库说:

Modifying the Region object returned by the Clip property does not affect subsequent drawing with the Graphics object. To change the clip region, replace the Clip property value with a new Region object.



这意味着,您必须处置 oldRgn

关于.net - 您何时处置GDI +资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com