C#中关于using的用法
2012-05-18 15:46
274 查看
昨天和同事无意中提及到关于using释放资源的问题,在此抛砖引玉一下。微软的官方定义是,Using定义一个范围,将在此范围之外释放一个或多个对象。以下是代码示例:
using (Font font1 = new Font("Arial", 10.0f)) {
}
示例.1
示例.2
我一般不建议使用using来释放对象,它的主要缺点是:
using不能替代try catch语句,如果要防止对象生成出现的异常,要整个using块进行异常监测,花费代价很高;
using的对象必须继承IDisposable接口,继承改接的对象在生成会比一般对象花费更大的开销和时间;
使用using除了能使代码更好看以外,找不出更好的使用理由。
我认为它的唯一优点就是:不会忘记释放资源!但是,除非诸如文件句柄和网络连接这样的有限资源外,不是每个对象都需要我们手动立刻释放资源,绝大多数可以交给垃圾处理器去自动处理。
示例.1中using代码显得很多余,因为font1根本不需要我们手工释放,它并没有消耗大量的内存资源需要们即时释放。示例.2中由于对象C继承了IDisposable接口,生成消耗更多的内存和时间,所以如果没有必要的话,尽量不要继承IDisposable接口。
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接口。
相关文章推荐
- C#关于using用法的总结
- 关于C# using的用法
- C#关于DateTime得到的当前时间的格式和用法
- using关键字在C#中的3种用法
- C#关于DateTime得到的当前时间的格式和用法
- C#中using的三种用法
- C# 关于windows mediaplayer的用法
- c# using 的三大用法
- 关于c# 泛型List集合对象的用法及相关操作
- 关于c# 泛型List集合对象的用法及相关操作
- C#中using的用法
- using的几种用法 C#
- C#关于DateTime得到的当前时间的格式和用法
- c#中using的用法详解
- C#中using关键字的作用及用法
- using这个关键字在C#中共用三个用法
- C#中关于@的用法
- 关于C#语言中的问号的一个需要注意的用法
- C#关于params的用法(使用数量可变的参数)
- C# using的用法