是否需要手动管理System.Drawing对象的生存期?
目前,我正在使用'using‘语句来最小化画笔和其他绘图对象的使用寿命。
using ( Brush br = new SolidBrush( color ) )
{
// Do something with br
}这是必要的,还是让垃圾收集器在需要的时候发挥它的魔力是安全的?
作为对这个问题的一个快速补充...人们认为实现这一目标的最干净的方法是什么?
发布于 2009-09-23 12:10:38
处理System.Drawing对象是一个很好的,但是当你得到一个异常时,如果你错过了一两个,这并不是世界末日。(其他对象,如打开的文件和数据库连接,必须始终释放)
在你的代码中使用大量的“Using”语句会让你的代码更难理解。因此,在System.Drawing对象的情况下,可以考虑在方法的末尾对它们调用Dispose()。
在过去,我使用了一个我编写为“Dustcart”的类,它实现了IDisposable,并包含了一个要处理的对象集合。然后,您可以编写如下代码:
using(var dustcart = new Dustcard())
{
var p = dustcart.Add(new Pen(red, etc));
var b = dustcart.Add(new Brush(black));
Pen t;
if (someFlag)
{
t = p;
}
else
{
t = dustcard.Add(new Pen(etc));
}
}发布于 2009-09-10 07:29:38
当对象为IDisposable时,最好在不再需要它时立即将其释放。(它实现IDisposable是有原因的)。
当然,当您忘记调用Dispose时,垃圾收集器将在某个时间完成其工作,并清理它,以便释放资源,但您永远不能知道或猜测垃圾收集器何时生效,它不是确定性的。
因此,我的建议是:一旦不再需要可处理对象,就手动调用Dispose (就像现在一样)。
发布于 2009-09-10 07:29:04
一般的经验法则是,如果一个对象实现了IDisposable,你需要清理它。在.NET框架中,IDisposable不是一时兴起就实现的--它有充分的理由存在。
https://stackoverflow.com/questions/1403813
复制相似问题