我正在处理的asp.net应用程序可能有几百个用户尝试连接。我们收到一个错误,表明已达到池中的最大连接数。我理解ADO.NET中连接池的概念,尽管在测试中我发现连接在ms sql 2005服务器上的“睡眠”时间连接完成后,浏览器关闭了。我试图限制连接字符串中的连接生存期,但这没有任何效果。我应该推送最大连接数吗?我是否完全误诊了真正的问题?
答案 0 :(得分:2)
所有数据库连接必须包含在try ... finally:
中SqlConnection myConnection = new SqlConnection(connString);
myConnection.Open();
try
{
}
finally
{
myConnection.Close();
}
或者......好多了,创建一个DAL(数据访问层),在其Dispose方法中调用Close()并用使用包装所有数据库调用:
using (MyQueryClass myQueryClass = new MyQueryClass())
{
// DB Stuff here...
}
一些注意事项:ASP.NET确实依赖于您发布Connections。它将在它们超出范围后通过GC释放它们但你可以不依靠这种行为,因为它可能需要很长时间才能启动 - 在连接池用完之前,可能比你能负担得起的时间长得多。说到这一点 - ASP.NET实际上会在您请求时将您的连接汇集到数据库中(回收旧连接而不是完全释放它们,然后从数据库中重新请求它们)。就你而言,这并不重要:你仍然必须调用Close()!
此外,您可以使用连接字符串(例如,最小/最大池大小等)来控制池。有关详细信息,请参阅MSDN上的this article。