【问题标题】:Using Statement and Connection Pooling使用语句和连接池
【发布时间】:2011-06-06 12:05:04
【问题描述】:

我最近开始了解 .NET 中“连接池”的概念,因此我有点怀疑我希望有人为我澄清一下。如果我使用下面这段代码,数据库连接什么时候会返回到池中,以便应用程序的另一部分可以使用它?

using (SqlConnection NewConnection = new SqlConnection(ConnectionString))
{
    using (SqlCommand NewCommand = new SqlCommand("SomeCommand", NewConnection))
    {
        try
        {
            NewConnection.Open();

            // Do some work...

            NewConnection.Close(); // <-- Here?
        }
        catch
        {
            // Error handling...
        }
    }
}

// <-- Here?

非常感谢。

【问题讨论】:

    标签: .net sql-server-2005 connection-pooling


    【解决方案1】:

    using 块执行完成后,连接确实会返回到池中。

    using statementsyntactic sugar - 编译器会生成一个正确的 Dispose 块来关闭连接,从而将其返回到连接池。

    【讨论】:

      【解决方案2】:

      您需要将SqlConnection 对象和基础 连接视为分开的。它是池化的基础连接。当SqlConnection 被释放时,这将返回到池中,通过显式使用Dispose() 或通过using 块*。稍后,可能会使用相同的基础连接创建一个新的(不同的)SqlConnection

      所以:奇迹发生了:

      using (SqlCommand NewCommand = new SqlCommand("SomeCommand", NewConnection))
      {
          ...
      } <==== here
      

      *=它也可能(我没有检查)被GC/finalizer 释放回池中 - 但我们不应该关注这一点,因为如果发生这种情况你已经做错了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-02
        • 2011-07-07
        • 2010-10-23
        • 2017-08-14
        • 1970-01-01
        • 1970-01-01
        • 2011-08-30
        • 2021-07-02
        相关资源
        最近更新 更多