Ror*_*ory 12 sql-server connection-pooling
我有一个客户端 - 服务器应用程序,使用.NET SqlClient数据提供程序连接到SQL服务器 - 非常标准的东西.默认情况下,在连接池管理器关闭数据库连接并将其从池中删除之前,连接必须有多长时间空闲?有什么设置控制这个?
这个MSDN文档只说
连接池在空闲了很长时间后,或者如果池中检测到与服务器的连接已被切断,则会从池中删除连接.
几年前,下面的答案是情况,但现在它已经改变,所以你可以参考源代码并写下摘要:)
老答案
这篇优秀的文章告诉我们我们需要知道什么,使用反射来揭示连接池的内部工作原理.
根据我的理解,"闭合"连接会在半随机间隔内定期清理.清理过程在每2分钟到3分钟50秒之间运行,但是在"关闭"连接正确关闭之前需要运行两次.因此,在"关闭"7分40秒之后,应该正确关闭底层的sql连接,但它可以短至2分钟.在编写时,在进程中创建的第一个连接池的计时器间隔始终为3分10秒,因此在ADO对象上调用Close()后,通常会看到sql连接在3分10秒到6分20秒之间关闭.
显然,这使用了未记录的代码,因此将来可能会发生变化 - 或者甚至可能在撰写该文章后发生了变化.