代码之家  ›  专栏  ›  技术社区  ›  Shyju

ASP.NET:如果在创建对象时使用

  •  -1
  • Shyju  · 技术社区  · 16 年前

    在ASP.NET中,我看到有人这样编码

    using (SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString))
    {
    
       // Do the datatbase transactions
    
    }
    

    它和这个有什么不同

     SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString)
     // Do the datatbase transactions
    

    使用一个比另一个性能/速度有什么改进吗?

    7 回复  |  直到 16 年前
        1
  •  2
  •   Arnis Lapsa    16 年前

    这只是一条捷径。:)

    using (var foo = new Foo())
        foo.bar();
    

    等于:

     Foo foo = new Foo();
     try
      {
          foo.bar();
      }
      finally
      {
        if (foo != null)
          ((IDisposable)foo).Dispose();
      }
    

    使用关键字确保对象将被释放(它必须实现IDisposable)。
    它在处理外部资源(数据库连接、文件流等)时很有用-尽管可能会发生错误,它们仍将被释放。

        2
  •  3
  •   rahul    16 年前

    using语句允许 程序员指定对象的时间 使用资源应该释放 他们。提供给使用者的对象 语句必须实现 IDisposable接口。此接口 提供Dispose方法,其中 应该释放对象的资源。

    可以退出using语句 当using语句的结尾是 已到达或引发异常 控件离开语句块 在语句结束之前。

    这里有一篇好文章

    Understanding the 'using' statement in C#

        3
  •  1
  •   Amr Elgarhy    16 年前

    使用:定义一个范围,在该范围之外将释放一个或多个对象。

    所以它只是语法,而不是创建对象然后处理它。

    更多细节 MSDN

        4
  •  0
  •   deostroll    16 年前

    在using构造中创建的对象在构造(大括号)中具有生存期。如果您只注意到那些实现IDisposable接口的成员,那么只能创建它们。它只是意味着,在使用构造代码之后,编译器将自动调用所创建对象的Dispose方法。它有助于垃圾收集。

    对于sqlconnection对象,我们必须调用Dispose,否则ADO.NET连接池(管理到数据库的连接)将为另一个传入请求分配新连接,而不是重用旧连接池。连接池只是一种固有的方法,可以最大限度地减少获取与数据库的连接所需的资源和时间。

    参考: 连接池 不可分的

        5
  •  0
  •   Russ Cam    16 年前

    使用语句是

    try
    {
        /* do the work here with obj */
    
    }
    finally
    {
        if (obj != null)
            obj.Dispose();
    } 
    
        6
  •  0
  •   LukeH    16 年前

    一般来说,您应该使用 using 实现的任何对象的语法 IDisposable 例如, SqlConnection .

    这个 使用 语句确保在(几乎)所有情况下,即使发生异常,对象也在块的末尾被正确地释放。

    这两种方式都没有任何直接的速度/性能差异,但是如果您不处理您的 不可分的 对象(通常使用 使用 )然后你可能会遇到问题,因为重要的资源还没有整理好。

    使用 使用 是很好的练习,而且几乎总是正确的做事方式。 不是 使用 使用 通常是个坏主意,除非你完全确定自己在做什么和为什么。

        7
  •  -1
  •   Bhaskar    16 年前

    using语句将自动调用finally,即一旦using块完成,它将丢弃对象。

    using (SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString))
    {
       // Do the datatbase transactions
    }
    

    相当于:

     SqlConnection myConnection = new SqlConnection(AppConfiguration.ConnectionString)
    // Do the datatbase transactions
        myConnection.Close();
        myConnection.Dispose()
    
    推荐文章