1

我正在开发的一个 asp.net 应用程序可能有几百个用户试图连接。我们收到一个错误,表明已达到池中的最大连接数。我了解 ADO.NET 中连接池的概念,尽管在测试中我发现连接建立后几天在 ms sql 2005 服务器上的连接处于“休眠”状态,然后关闭浏览器。我试图限制连接字符串中的连接寿命,但这没有效果。我应该推送最大连接数吗?我是否完全误诊了真正的问题?

4

1 回答 1

2

您的所有数据库连接都必须包含在 try...finally 中:

SqlConnection myConnection = new SqlConnection(connString);
myConnection.Open();
try
{
}
finally
{
   myConnection.Close();
}

或者...更好的是,创建一个在 Dispose 方法中有 Close() 调用的 DAL(数据访问层),并使用 using包装所有数据库调用:

using (MyQueryClass myQueryClass = new MyQueryClass())
{
   // DB Stuff here...
}

一些注意事项:ASP.NET 确实依赖于您来释放您的连接。它在它们超出范围后通过 GC 释放它们,但您不能指望这种行为,因为它可能需要很长时间才能启动 - 比您在连接池运行之前所能承受的时间长得多出去。说到这 - ASP.NET 实际上在您请求它们时将您与数据库的连接池化(回收旧连接而不是完全释放它们然后从数据库中重新请求它们)。就您而言,这并不重要:您仍然必须调用 Close()!

此外,您可以通过使用连接字符串(例如,最小/最大池大小等)来控制池。有关详细信息,请参阅MSDN 上的这篇文章

于 2009-09-16T18:12:53.303 回答