C# 了解ado.net连接池,而不是关闭连接
在web应用程序中不关闭连接的后果是什么 据我所知,假设您的池中有100个连接,如果您没有关闭连接,并且连接超时时间相当高,这就是隐藏的情况:C# 了解ado.net连接池,而不是关闭连接,c#,ado.net,connection-pooling,C#,Ado.net,Connection Pooling,在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语句
有关更多详细信息,请参阅本文: