关闭或不关闭Oracle连接?

时间:2012-04-12 15:20:17

标签: oracle connection connection-string connection-pooling odp.net

我的应用程序存在性能问题,因此我开始从根目录进行调查:“与数据库的连接”。

最佳做法是:“打开连接,使用它并尽快关闭”,但我不知道这会导致的开销,所以问题是:

1 - “使用ODP.NET打开,使用,关闭连接是最好的方法吗?”

2 - 有没有办法以及如何在ODP.NET中使用连接池? 我想创建一个List来存储一些连接字符串,并创建一个逻辑,以便在每次需要时选择“最佳”连接。这是最好的方法吗?

3 个答案:

答案 0 :(得分:6)

这是一个包含Oracle推荐的最佳实践的幻灯片:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

创建OracleConnection时会自动获得连接池。对于大多数中间层应用程序,您将希望利用它。您还需要通过启用注册表中的性能计数器来调整池以获得实际工作负载。

有关连接池的详细信息,请参阅ODP.NET联机帮助。池设置将添加到连接字符串中。

人们在OracleConnections中遇到的另一个问题是,垃圾收集器并没有意识到它们是如何真正占用资源,并且没有及时清理它们。事实上,ODP.NET没有完全管理,因此一些资源对垃圾收集器是隐藏的。因此,最佳做法是关闭()和Dispose()所有Oracle ODP.NET对象(包括OracleConnection)以强制清除它们。

此特定问题将在Oracle完全托管的提供商中得到缓解(不久将推出测试版)

(编辑:ODP.NET,托管驱动程序现已推出。)

Christian Shay

的Oracle

答案 1 :(得分:1)

ODP.NET是ADO.NET的数据提供者。 ADO.Net的最佳实践是打开,获取数据(到内存),关闭,在内存数据中使用。 例如,使用OracleDataReader将数据加载到内存中的DataTable中并关闭连接。

[]' S

答案 2 :(得分:0)

对于单个事务,这是最好的,但对于最后提交的多个事务,这可能不是最佳解决方案。您需要保持连接处于打开状态,直到事务提交或回滚为止。你如何管理它,以及如何检查连接是否仍然存在?(即网络故障)有ConnectionState.Broken属性,此时不起作用。