C# 使用Using和Try/Finally 进行资源清理
来源:互联网 发布:重庆seo博客sina 编辑:程序博客网 时间:2024/06/11 15:00
.NET 环境规定由使用类创建实例对象的代码来处理对象的资源回收操作,也就是由调用对象的代码来调用Dispose()(实现IDisposable接口)方法来处理资源回收。
所有拥有托管资源的类型都实现了IDisposable接口,并且都创建了一个finalizer来防止你没有显示地调用dispose,但若依赖于此,在执行此类finalizer释放资源操作时,由于贮存在内存中的资源过多,执行释放操作会使程序变得很慢。
好在C#提供了using关键字来帮助你确保时候后释放资源,其在编译时会生成和try/finally同样的的IL代码。其会在释放资源时通知GC去释放资源,其内部调用的方法为:GC.SuppressFinalize()。使用方法和try/finally对比代码如下:
SqlConnectionmyConnection = null;
// Example Usingclause:
using (myConnection =new SqlConnection(connString))
{
myConnection.Open();
}
// example Try /Catch block:
try
{
myConnection= new SqlConnection(connString);
myConnection.Open();
}
finally
{
myConnection.Dispose();
}
注意:using只能用于实现了IDisposable接口的方法的类型,否则编译时就会报错了
若你不知道你要是用的对象是否支持IDisposable接口,那么你可以使用 as语法,假定其可以被using代码如下:
// The correct fix.
// Object may or maynot support IDisposable.
object obj =Factory.CreateResource();
using (obj asIDisposable)
Console.WriteLine(obj.ToString());
注意:若有多个嵌套的支持IDisposable接口对象的资源使用情况,请使用try/finally,以免生成过多的try/finally嵌套 IL代码。
最后,记住一点,不要在对象还被其他对象引用时就调用其Dispose方法。
- C# 使用Using和Try/Finally 进行资源清理
- 使用using和try/finally清理资源<.NET资源管理>
- Effective C# 原则15:使用using和try finally来做资源清理
- Effective C# 原则15:使用using和try/finally来做资源清理
- Effective C# Item15:利用using和try/finally语句来清理资源
- 使用using或try/finally清理内存
- 提高C#编程水平的50个要点 之十五“使用 using 和 try-finally 来处理资源的释放”
- 利用using和try-finally来释放资源
- 利用using和try-finally来释放资源
- 利用using和try-finally来释放资源 (.net C#)
- 使用 finally进行清理
- C# using 与Try-catch-finally的区别和用法
- C# using 与Try-catch-finally的区别和用法
- using在C#中的强制资源清理的用法,何时用using,何时用try
- C# Using与Try..Finally 语句探究
- 可以使用 using 或者 try-catch-finally 调用 Dispose() 来释放非托管资源
- 《Effective C#》Item 15:利用using和try-finally来释放资源
- C#中的try catch 和finally
- 我也有博客啦
- JDK+MyEclipse+Tomcat的配置
- Java中何时用String,何时用StringBuilder
- iOS开发之缓存(一):内存缓存
- [Repaste] Windows 8 for software developers: the Longhorn dream reborn?
- C# 使用Using和Try/Finally 进行资源清理
- Tips on how to decide on a great luxurious enjoy
- 2011-7-30 17:10:35
- MyEclipse的破解代码
- DDK与WDK
- 正则表达式30分钟入门教程
- Maven2 快速入门
- 键盘输入EOF,在istream_iterator中, 不输入EOF死循环
- [usaco]罗马数字