我对连接池有一些疑问。在Server连接池文章中,有人提到“当打开新连接时,如果连接字符串与现有池不完全匹配,则创建一个新池。每个进程、每个应用程序域、每个连接字符串以及在使用集成安全性时,根据每个Windows标识进行连接池”。
现在,我有了自己的windows窗体应用程序,它具有SQL连接。
发布于 2014-12-30 06:54:36
连接池最终没有什么神奇之处。将它们看作.NET对象,它们只保留一个连接列表。
因此,这些对象在每个AppDomain中都存在,并且存在于CLR中,而CLR与进程的生存期绑定在一起。
如果您的进程消失了,CLR实例也会消失,AppDomains也会消失,连接池也会消失。就像您拥有的其他.NET对象一样。
如果重新启动应用程序,连接池将被重新创建,同样基于MSDN描述的规则。
发布于 2014-12-30 06:55:58
1)正如您引用的那样,池是每个进程池的,因此,如果关闭应用程序,它将关闭池。
2)不重要,因为池是每个进程,当您关闭应用程序时,它关闭池。
3)是的,它是在连接串中用Connection Lifetime或Load Balance Timeout键设置的。
连接生命周期或负载平衡超时 当连接返回到池时,将将其创建时间与当前时间进行比较,如果连接时间跨度(以秒为单位)超过连接生命周期指定的值,则该连接将被销毁。这在集群配置中非常有用,可以在运行中的服务器和刚刚上线的服务器之间强制负载平衡。值为零(0)将导致池连接具有最大连接超时。
如果不使用上述设置(默认为0),则只需使用池的默认行为。
连接池程序在空闲大约4至8分钟后,或者如果池程序检测到与服务器的连接已被切断,则从池中移除连接。
发布于 2014-12-30 07:00:26
连接池程序在空闲大约4至8分钟后,或者如果池程序检测到与服务器的连接已被切断,则从池中移除连接。请注意,只有在尝试与服务器通信之后才能检测到断开的连接。如果找到不再连接到服务器的连接,则将其标记为无效。只有当连接池关闭或回收时,才会从连接池中移除无效连接。
如果存在到已消失的服务器的连接,则即使连接池程序未检测到已断开的连接并将其标记为无效,也可以从池中提取此连接。这种情况是这样的,因为检查连接是否仍然有效的开销将通过导致另一次到服务器的往返而消除池程序的好处。当发生这种情况时,第一次尝试使用连接将检测到连接已被切断,并引发异常。
请参阅此链接连接池删除连接部分
https://stackoverflow.com/questions/27700847
复制相似问题