这种行为是正常的,因为如果您Dispose();
建立连接,来自 Oracle 的 ConnectionPool 并不会真正破坏连接,而是将状态设置为“空闲”。所以下次你打开一个连接时,你并没有真正打开一个新连接,你只是在你的 ConnectionPool 中寻找一个“免费”连接并使用这个连接。如果不存在空闲连接,则会创建一个新连接。
此行为可确保您获得更好的性能,因为打开/关闭连接的成本很高。
如果您使用:
using(OracleConnection con = new OracleConnection(constring))
{
}
或者
con.Close();
这和你使用的一样Dispose();
。使用只需确保在 using 块的末尾调用 Dispose。这就是为什么 using 仅适用于实现 IDisposable 的对象。
到目前为止还好...但是为什么不OracleConnection.ClearAllPools()
关闭连接?确实如此,但 Oracle 直接创建一个新连接,以便您的 ConnectionPool 填充到您的 MinPool-Size。这就是 BigTallJosh 的代码的原因:
“最小池大小 = 0;最大池大小 = 16;增量池大小 = 2;Decr 池大小 = 1;验证连接 = False;连接生命周期 = 0;
停止这种行为。Min Pool Size 为 0 将停止自动创建新连接。
在这里你可以找到关于ClearAllPools();
Method 的一个很好的解释。
所以最后回答你的问题。设置MinPoolSize=0
and 之后调用connection.ClearAllPools();
。这应该有效。