C#释放Oracle连接

caonimadigepi 2012-08-14 10:16:04
每次打开子窗体,Oracle会话数就会增加,但是关闭子窗体时,Oracle会话并不会减少,这样导致子窗体使用频率很高时,会话数会不停增加,直至达到Oracle最大进程数。在子窗体关闭事件里面调用Dispose()方法,会话也不会减少,只有在调用Application.Exit()方法退出整个应用程序时,Oracle才会释放会话。请问,有没有办法实现关闭子窗体时就释放相应的会话?谢谢!
...全文
385 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qldsrx 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

oracle那个会话并不是实时的,即使你程序中释放了,oracle系统中也要过一会才行。

请问Oracle要过多长时间才会释放?或者有没有让它立即释放的方法?
[/Quote]
立刻释放的,你看到的是一个缓存实例(即使过几天都不会再释放了),如果下次再新建一个连接,不会再有增加会话数的情况了,而是使用上次关闭的那个连接,这是默认的缓存模式,效率高,如果要取消缓存,那么每次关闭都要重新建立连接,效率很低,不推荐。
caonimadigepi 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

oracle那个会话并不是实时的,即使你程序中释放了,oracle系统中也要过一会才行。
[/Quote]
请问Oracle要过多长时间才会释放?或者有没有让它立即释放的方法?
baiwenyu 2012-08-14
  • 打赏
  • 举报
回复
oracle那个会话并不是实时的,即使你程序中释放了,oracle系统中也要过一会才行。
caonimadigepi 2012-08-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

你必须手动调用Close方法来关闭连接,或者直接用using语句块创建连接,仅仅关闭窗口,连接是不会被关闭的,因为那个是非托管资源。
[/Quote]
调用了Close方法关闭连接,Oracle会话依然未被释放
qldsrx 2012-08-14
  • 打赏
  • 举报
回复
你必须手动调用Close方法来关闭连接,或者直接用using语句块创建连接,仅仅关闭窗口,连接是不会被关闭的,因为那个是非托管资源。
ljjk123 2012-08-14
  • 打赏
  • 举报
回复
连接 随查随开,查完就关 connection.close();
干嘛窗体一直连着呢
qldsrx 2012-08-14
  • 打赏
  • 举报
回复
OracleConnection.ClearAllPools()可以清空缓存的连接,但不推荐这么做。
另外子窗体关闭和销毁是两个不同的概念,你关闭窗体其实是隐藏窗体,并未真正关闭,请参考MSDN上的说法。
caonimadigepi 2012-08-14
  • 打赏
  • 举报
回复
我现在只想实现关闭子窗体时,把由这个子窗体产生的连接释放掉,都没有办法了么?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧