我有一个应用程序,它使用ODP.net将大约10000个条目插入并更新到OracleDatabase中的几个表中。
起初,应用程序为每个条目打开和关闭oracleconnection。该应用程序在某些条目块上运行良好,但过了一段时间(并不总是一样),它就停止了运行,它仍然在使用内存,但没有CPU,也没有抛出任何错误。我发现是在应用程序调用OracleConnection Close方法时。
我已经将其更改为打开和关闭,并在应用程序的开始和结束时进行连接,一切都很好。
尽管为每个条目打开和关闭连接不是正确的方式,但我的问题是,为什么它只是停在OracleConnection的方法close()上?
有人有主意吗?
提前谢谢。
我可以提出两个原因,这两个原因我以前都见过。
首先,如果您有一个影响大量记录的长时间运行的连接,那么可能是由于时间的原因(或者可能有什么东西阻止了插入/更新),连接池管理器正试图重新声明&回收连接。
另一个很难调试的问题是,您的连接可能会通过防火墙,而防火墙会丢弃长时间运行的连接。如果是这种情况,在从池中打开新连接时,您可能会遇到偶尔的问题——它应该是可用的,但当您尝试打开它时失败了(我忘记了确切的症状和错误消息,因为这是几年前的事了)。