2009-07-16 78 views
10

我有一个客户端 - 服务器应用程序,它使用.NET SqlClient数据提供程序连接到sql服务器 - 非常标准的东西。默认情况下,连接池管理器将关闭数据库连接并将其从池中删除之前,连接必须闲置多久?如果有任何控制这个设置什么设置在连接池关闭之前,sql服务器连接必须闲置多久?

This MSDN document只是说

连接池程序删除从池中的连接,已经闲置了很长一段时间后,或者如果池程序检测到与服务器的连接已中断。

回答

7

前几年的答案下面是这种情况,但现在它已经改变,所以你可以参考source并写了总结:)


老答案

This excellent article告诉我们需要知道的东西,用反射来揭示连接池的内部运作。

从我的理解来看,'封闭'连接会以半随机间隔定期清理。清理过程每隔2分钟到3分钟50秒之间运行一次,但需要在“关闭”连接正确关闭之前运行两次。因此,在“关闭”7分钟40s后,底层的sql连接应该被正确关闭,但可能短至2分钟。在编写本文时,在进程中创建的第一个连接池总是有3分钟10秒的计时器间隔,因此在ADO对象上调用Close()后,通常会看到sql连接在3分10秒和6分20秒之间关闭的某处。

很明显,这会使用未公开的代码,因此将来可能会更改 - 或者自该文章写入后甚至可能发生更改。

0

请通过此:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring%28VS.80%29.aspx

的部分

“下表列出了有效的 名字连接池的ConnectionString内的值 ”

似乎是你的兴趣。

+0

嗯......唯一可能适合的设置是负载均衡超时,但这不是最长时间,因此增加它应使连接持续更长时间。我想知道“闲置很长时间”是什么意思默认。如果连接池决定连接已空闲,那么它不应该依赖于SQL Server连接超时。还有像SQL Server的连接超时这样的事情吗? – Rory 2009-07-16 11:44:04

+0

可以使用连接生命周期来决定连接的最长寿命(空闲+使用时间)。 – 2009-07-16 12:02:19