C#中关于using的用法

1 篇文章 0 订阅

    昨天和同事无意中提及到关于using释放资源的问题,在此抛砖引玉一下。微软的官方定义是,Using定义一个范围,将在此范围之外释放一个或多个对象。以下是代码示例:

using (Font font1 = new Font("Arial", 10.0f)) {

}

    示例.1

 

 
using System;

class C : IDisposable
{
    public void UseLimitedResource()
    {
        Console.WriteLine("Using limited resource...");
    }

    void IDisposable.Dispose()
    {
        Console.WriteLine("Disposing limited resource.");
    }
}

class Program
{
    static void Main()
    {
        using (C c = new C())
        {
            c.UseLimitedResource();
        }
        Console.WriteLine("Now outside using statement.");
        Console.ReadLine();
    }
}

 

示例.2

 

    我一般不建议使用using来释放对象,它的主要缺点是:

  • using不能替代try catch语句,如果要防止对象生成出现的异常,要整个using块进行异常监测,花费代价很高;
  • using的对象必须继承IDisposable接口,继承改接的对象在生成会比一般对象花费更大的开销和时间;
  • 使用using除了能使代码更好看以外,找不出更好的使用理由。

    我认为它的唯一优点就是:不会忘记释放资源!但是,除非诸如文件句柄和网络连接这样的有限资源外,不是每个对象都需要我们手动立刻释放资源,绝大多数可以交给垃圾处理器去自动处理。

    示例.1中using代码显得很多余,因为font1根本不需要我们手工释放,它并没有消耗大量的内存资源需要们即时释放。示例.2中由于对象C继承了IDisposable接口,生成消耗更多的内存和时间,所以如果没有必要的话,尽量不要继承IDisposable接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值