我在不同的方法中使用多个连接,但是当我关闭连接时,连接会话作为非活动挂起在数据库会话中,直到终止.exe文件。我在使用语句时使用连接,如下所示:
using(OracleConnection con = new OracleConnection(constring))
{
con.Open();
}我还试图手动关闭和释放连接,并使用OracleConnection.ClearPool(con)和OracleConnection.ClearAllPools(),但它们都不起作用。
使用:System.Data.OracleClient版本2.0.0.0的引用im
连接字符串数据源= ip/db;用户Id =用户;Password=pw;
发布于 2017-01-06 10:06:31
这种行为是正常的,因为如果您Dispose();连接,来自ConnectionPool的ConnectionPool并没有真正破坏连接,而是将状态设置为“空闲”。所以下一次当你打开一个连接时,你不会真的打开一个新的连接,你只需要在你的ConnectionPool中寻找一个‘免费’的连接,然后使用这个连接。如果不存在自由连接,则将创建一个新连接。
这种行为为您提供了更好的性能,因为打开/关闭连接成本很高。
如果你使用:
using(OracleConnection con = new OracleConnection(constring))
{
}或
con.Close();这与使用Dispose();相同。使用时,只需确保在Using块的末尾调用Dispose。这就是为什么只对实现IDisposable的对象使用。
到目前为止,ok...But为什么OracleConnection.ClearAllPools()不关闭连接?确实如此,但是Oracle直接创建了一个新的连接,这样您的ConnectionPool就可以填充到MinPool大小。这就是为什么BigTallJosh的代码:
"Min池大小= 0;最大池大小= 16;Incr池大小= 2;Decr池大小= 1;验证连接= False;连接寿命= 0;
停止这种行为。Min池大小为0将停止自动创建新连接。
Here您可以找到关于ClearAllPools();方法的一个很好的解释。
所以最后要回答你的问题。设置MinPoolSize=0并在该调用之后调用connection.ClearAllPools();。这应该能行。
https://stackoverflow.com/questions/41502489
复制相似问题