C# using的一些事



一.using释放资源 

using不可以释放所有的对象,原因如下:

  1.using可以主动释放的对象都需要实现IDisable接口。

  2.即使都实现了IDisable接口,也没有必要全部使用using,我们只对那些对系统性能有重要

   影响的对象进行了using限定,而其他的对象可以交给垃圾回收器处理。

using释放资源的过程:

 首先回顾数据库连接和关闭代码的写法,说明数据库连接是一种宝贵的资源,用完了必须马上释放,使用try-catch-finally就可以保证数据库连接的正确释放。指出try-catch-finally代码结构繁琐,有一种替代的方式就是使用using,展示using释放数据库资源的例子,并说明以下几点:

(1)using的语法结构

(2)使用using和try--catch--finally释放数据库连接是完全等效的。

   但是代码要精简,不需要显示调用Close()方法。

 最后进一步深入介绍using,如下:

 (1)using用来释放一个对象占用的重要资源,不仅仅包括数据库对象,还有文件读写对象等;

 (2)使用using语法的对象都需要实现IDisable接口的Dispose()方法。

    该方法专门用来释放对象占用的重要资源。

    Using语句编译后自动生成对Dispose()方法调用的代码。

 (3)Close()方法封装了对Dispose()方法的调用。

 

Using的两个作用: 其1:导入命名空间

                 其2:释放对象占用的资源,如Connection,DataReader,FileStream

            Using引起来的对象的作用域只在花括号,出了{}就不再起作用了。

注:

using可以让程序员不手动关闭连接对象

using释放的是托管资源还是非托管资源?

解析:

非托管,C#应用托管到.NET Framework.但是他可以释放非托管资源。

  1. Dispose() 是 IDisable 接口的方法

  2 .Dispose() 专用于释放对象稀缺资源

  3 .Object 类实现了Dispose(),部分类实现了Close()

  4 .Close()封装了对Dispose()的调用

二 using语句原理

using可以释放对象,但并非所有的对象前都可以使用using来限制

原因:

using可以主动释放的对象都需要实现IDisable接口。

 

为什么出了using所在的{},会自动回收对象。

原因是当我们将要出{},系统自动调用了Dispose()方法。

而在DISpose方法中是这么实现的

注:Dispose方法会自动调用Close()

 

要想让一个类型可以通过using管理,该类型或者父类必须实现了IDisposable接口。

 using(SqlConnection con=new SqlConnection)

{

   //本质上自动调用了Dispose方法

}

close()和dispose()区别?

解析:

close()只是关闭连接,但是通道没有销毁,dispose()不仅把连接给关闭了,而且把通道也给销毁了。

原文地址:https://www.cnblogs.com/hq-123/p/5473665.html