DotNet下使用GDI+绘图时资源是否需要释放

DotNet下使用GDI+绘图时资源是否需要释放

 

可能很少有人注意到这样的问题,最近我在写一个绘图模块的时候,忽然意识到这好象是一个问题,因为不过我们以前用GDI绘图时,书本的代码会明确地告诉你一定要删除自已创建的绘图对象,因此我们常常写完了SelectObject,一定会马上写一个DeleteObject,以防止资源泄漏。

可是,当你来到的DotNet的环境下,你随便打开一本关于绘图的书,好了我们以经典的《C#高级编程(第3版)》为例,其中一个小段(P563):

protected override void OnPaint(PaintEventArgs e)

{

     base.OnPaint(e);

     Graphics dc = e.Graphics();

     Pen bluePen = new Pen(Color.Blue,3);

     dc.DrawRectangle(bluePen,0,0,50,50);

     Pen redPen = new Pen(Color,Red,2);

     dc.DrawEllipse(redPen,0,50,80,80);

}

我发现居然没有认为必需有的一句bluePen.Dispose(),为什么会是这样,会不会是作者的失误,如果是这样,作为一本经典的书籍作者是不应该出现这样的错误。而且整本书中也没有提到是否要释放这个资源的问题,如果不需要为什么CLR中又有Dispose这个方法呢?更加奇怪的是几乎能找到的C#代码中都没有Dispose这句。于是我决定用Reflector来看看CLR中的Dispose实现了什么。

Pen类为例,Pen实现了三个有关资源释放的方法

public void Dispose();

private void Dispose(bool disposing);

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值