zoukankan      html  css  js  c++  java
  • 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()不仅把连接给关闭了,而且把通道也给销毁了。

  • 相关阅读:
    JavaScript中的setMonth()方法的小问题 解决:setMonth(month, 1)
    Bootstrap的Model源码详细注释 (转)
    中检测到有潜在危险的 Request.Form 值。
    JQuery EasyUI DataGrid获取当前行
    VS 开发必用插件
    C# MVC模式 404 500页面设置方法
    (转)高性能网页开发的14条军规
    (转)mysql百万级以上查询优化
    Win7/Win8安装"我们无法创建新的分区,也找不到现有的分区"的解决方法
    SQL Server2008 删除登录记录
  • 原文地址:https://www.cnblogs.com/hq-123/p/5473665.html
Copyright © 2011-2022 走看看