Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 了解ado.net连接池,而不是关闭连接_C#_Ado.net_Connection Pooling - Fatal编程技术网

C# 了解ado.net连接池,而不是关闭连接

C# 了解ado.net连接池,而不是关闭连接,c#,ado.net,connection-pooling,C#,Ado.net,Connection Pooling,在web应用程序中不关闭连接的后果是什么 据我所知,假设您的池中有100个连接,如果您没有关闭连接,并且连接超时时间相当高,这就是隐藏的情况: 打开连接将从池中获取连接 如果不关闭它,它将保持打开状态,直到超时过期,然后一些后台线程将在池中循环并显式关闭/返回到池的连接 尽管c#是被管理的,但这并不意味着它会在页面请求结束后为您关闭东西,对吗?这就是超时设置的作用,对吗或者.net运行时是否足够聪明,知道既然页面请求结束,连接可以关闭? 这是真的吗?连接池意味着当您关闭(或处理您的连接)时,它实

在web应用程序中不关闭连接的后果是什么

据我所知,假设您的池中有100个连接,如果您没有关闭连接,并且连接超时时间相当高,这就是隐藏的情况:

  • 打开连接将从池中获取连接
  • 如果不关闭它,它将保持打开状态,直到超时过期,然后一些后台线程将在池中循环并显式关闭/返回到池的连接
  • 尽管c#是被管理的,但这并不意味着它会在页面请求结束后为您关闭东西,对吗?这就是超时设置的作用,对吗或者.net运行时是否足够聪明,知道既然页面请求结束,连接可以关闭?


    这是真的吗?

    连接池意味着当您关闭(或处理您的连接)时,它实际上并没有关闭,而是返回到池中。这允许再次使用连接

    任何实现了
    IDisposable
    的托管对象都应该在using语句中使用(大多数情况下,WCF是一个明显的例外)。使用
    SqlConnection
    这将导致调用close,并允许重新使用连接

    垃圾收集器将在某个点拾取未处理的连接并对其进行处理,但您永远不会知道何时进行处理,因为它不是确定性的


    Sql连接是一种有限的资源,您应该尽快关闭它们,以确保池中的连接不会用尽。始终建议您显式关闭所有连接,以将它们释放到连接池,供其他进程使用

    如果您有一个SqlConnection对象,它应该在页面请求之后释放。这是因为System.Web.UI.Page和SqlConnection对象都实现了IDisposable。当对页面的请求完成时,页面对象被释放。当处理SqlConnection对象时,连接将关闭。这就是为什么在using语句中实现了SqlConnection对象的大多数用法:

        using (SqlConnection connection = new SqlConnection(
      "Integrated Security=SSPI;Initial Catalog=Northwind"))
        {
            connection.Open();      
            // Pool A is created.
        }
    
    始终建议显式关闭它或使用using语句

    有关更多详细信息,请参阅本文: