您的位置:首页 > 编程语言 > C#

C#中关于using的用法

2012-05-18 15:46 267 查看
昨天和同事无意中提及到关于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接口。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: