【问题标题】:C# WinForm Oracle sessions hangs after connection closedC# WinForm Oracle 会话在连接关闭后挂起
【发布时间】:2017-01-06 09:21:04
【问题描述】:

我正在以不同的方法使用多个连接,但是当我关闭连接时,连接会话在数据库会话中挂起为非活动状态,直到我终止 .exe 文件。我在 using 语句中使用连接,例如:

using(OracleConnection con = new OracleConnection(constring))
{
con.Open();
}

我还尝试手动关闭和处理连接并使用 OracleConnection.ClearPool(con)OracleConnection.ClearAllPools() 但它们都不起作用。 p>

参考即时通讯使用: System.Data.OracleClient 版本 2.0.0.0

连接字符串 数据源 = ip/db;用户 ID = 用户;密码=pw;

【问题讨论】:

  • 这不是一个真正的答案,但我们最近工作的地方遇到了一个非常相似的问题。其他开发人员之一已将此添加到我们的连接字符串中,情况似乎有所改善。我绝不是这方面的专家,但它也可以帮助你。 “最小池大小 = 0;最大池大小 = 16;增量池大小 = 2;Decr 池大小 = 1;验证连接 = False;连接生命周期 = 0;”只需将其添加到您的连接字符串中,看看它是如何进行的。
  • Incr 池大小、Decr 池大小和验证连接不支持关键字:(
  • 我的错误我错过了您仍在使用 System.Data.OracleClient。这在当今已被弃用。您是否尝试过使用较新的 ODAC 适配器? oracle.com/technetwork/topics/dotnet/downloads/…
  • 我很乐意,但我必须使用 net 2.0 框架,我猜 2.0.0.0 是它的最新适配器。至少微软。对不起,我忘了提到我正在使用 net 2.0 和谢谢你的帮助。

标签: c# winforms session oracle10g system.data.oracleclient


【解决方案1】:

这种行为是正常的,因为如果您Dispose(); 连接,来自 Oracle 的 ConnectionPool 并不会真正破坏连接,而是将状态设置为“空闲”。所以下次你打开一个连接时,你并没有真正打开一个新连接,你只是在你的 ConnectionPool 中寻找一个“免费”连接并使用这个连接。如果不存在空闲连接,则会创建一个新连接。

此行为可确保您获得更好的性能,因为打开/关闭连接的成本很高。

如果你使用:

using(OracleConnection con = new OracleConnection(constring)) 
{
}

con.Close();

这与您使用Dispose(); 相同。使用只需确保在 using 块的末尾调用 Dispose。这就是为什么 using 仅适用于实现 IDisposable 的对象。

到目前为止还可以...但是为什么OracleConnection.ClearAllPools()不关闭连接?确实如此,但 Oracle 直接创建一个新连接,以便您的 ConnectionPool 填充到您的 MinPool-Size。这就是为什么 BigTallJosh 的代码的原因:

"Min Pool Size = 0; Max Pool Size = 16; Incr Pool Size = 2; Decr Pool 大小 = 1;验证连接 = False;连接寿命 = 0;

停止这种行为。 Min Pool Size 为 0 将停止自动创建新连接。

Here你可以找到关于ClearAllPools();方法的很好的解释。

所以最后回答你的问题。设置MinPoolSize=0,然后调用connection.ClearAllPools();。这应该可以。

【讨论】:

  • Clearpool()Clearpools() 在使用 Oracle.DataAccess 2.102.2.20 更改当前参考后工作,但现在我将在某些计算机上遇到一些 oracle 客户端问题 :( 感谢您的努力
  • @trksyln 欢迎您。有趣的是这个版本有问题。
  • 感谢您的解释,我真的不明白我们的其他开发人员做了什么让我们的更好,但这清楚地解释了它! +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
相关资源
最近更新 更多