首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Drawing对象的处置

System.Drawing对象的处置
EN

Stack Overflow用户
提问于 2009-09-10 07:26:11
回答 6查看 2.8K关注 0票数 1

是否需要手动管理System.Drawing对象的生存期?

目前,我正在使用'using‘语句来最小化画笔和其他绘图对象的使用寿命。

代码语言:javascript
复制
using ( Brush br = new SolidBrush( color ) )
{
    // Do something with br
}

这是必要的,还是让垃圾收集器在需要的时候发挥它的魔力是安全的?

作为对这个问题的一个快速补充...人们认为实现这一目标的最干净的方法是什么?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-09-23 12:10:38

处理System.Drawing对象是一个很好的,但是当你得到一个异常时,如果你错过了一两个,这并不是世界末日。(其他对象,如打开的文件和数据库连接,必须始终释放)

在你的代码中使用大量的“Using”语句会让你的代码更难理解。因此,在System.Drawing对象的情况下,可以考虑在方法的末尾对它们调用Dispose()。

在过去,我使用了一个我编写为“Dustcart”的类,它实现了IDisposable,并包含了一个要处理的对象集合。然后,您可以编写如下代码:

代码语言:javascript
复制
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));
   }
}
票数 2
EN

Stack Overflow用户

发布于 2009-09-10 07:29:38

当对象为IDisposable时,最好在不再需要它时立即将其释放。(它实现IDisposable是有原因的)。

当然,当您忘记调用Dispose时,垃圾收集器将在某个时间完成其工作,并清理它,以便释放资源,但您永远不能知道或猜测垃圾收集器何时生效,它不是确定性的。

因此,我的建议是:一旦不再需要可处理对象,就手动调用Dispose (就像现在一样)。

票数 10
EN

Stack Overflow用户

发布于 2009-09-10 07:29:04

一般的经验法则是,如果一个对象实现了IDisposable,你需要清理它。在.NET框架中,IDisposable不是一时兴起就实现的--它有充分的理由存在。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1403813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档