【发布时间】:2012-09-30 19:27:04
【问题描述】:
@usr 和我是having a disagreement in another question 关于 .NET 是否会清除已空闲但仍保持保留引用的打开连接。
我坚持,based on documentation,如果物理连接空闲一段时间,即使 SQLConnection 对象引用保持保持,它也会在一段时间后被回收。
usr 声称这不会发生,它只回收不再有引用的连接。他的断言将使连接池变得不可靠,并且会对事务造成严重破坏。
我承认,文档对持有参考的问题含糊不清。
我正在寻找一个权威的答案,而不仅仅是猜测。要么有人已经试验并证明了这两种情况,要么是了解内部工作原理的人。
那是哪一个?
编辑:
我认为这里的混淆在于“关闭”的术语。情况似乎是文档将关闭物理连接称为从池中“删除”连接。而“关闭”是指将打开的物理连接释放回池中以供重复使用。
打开的连接仍然可以中止,但是如果客户端应用程序仍将其保持为打开状态(即客户端应用程序尚未在中止的连接上调用关闭),池程序是否将其标记为无效,但不确定它是否真的很重要,而不是作为池计数的一部分。
【问题讨论】:
-
嗯,默认连接超时是 30 秒 - 超过这个超时将导致连接异常关闭并被池回收。但是,如果超时时间不受限制,则不会回收打开的连接。
-
@Oded - 我认为超时只是框架尝试连接的时间。不过,如果属实,它并不能真正解决问题。
-
我可能正在考虑连接生命周期...
-
您认为文档的哪一部分说空闲连接可以/将被回收?
-
@HenkHolterman - 删除连接部分。
标签: .net sql-server connection-pooling sqlconnection