关闭或不关闭Oracle连接?

问题描述:

我的应用程序有性能问题,所以我开始从根来研究:“与数据库的连接”。关闭或不关闭Oracle连接?

最好的做法说:“打开一个连接,使用和关闭,尽快为”,但我不知道这会导致开销,所以问题是:

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

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

+2

你说的是客户端/服务器应用程序吗?还是三层应用程序?您是否声明您已经对应用程序进行了描述并确定开放和关闭数据库连接是瓶颈?或者你只是猜测性能问题可能与数据库相关? – 2012-04-12 15:25:17

+1

这是谁的最佳做法?打开到数据库的连接是一个昂贵且耗时的操作。因此,最好的建议是尽可能长时间保持连接畅通并使用。 – APC 2012-04-12 16:59:52

+0

贾斯汀。是的,它是一个Asp.Net应用程序,所以它是3层或4层的客户端/服务器,“开放连接操作”不是瓶颈,但我认为它会导致性能降低(如果使用不正确)。 – Ewerton 2012-04-12 17:22:13

]下面是一个包含Oracle的幻灯片甲板推荐的最佳做法:

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

当您创建一个OracleConnection你自动获得一个连接池。对于大多数中间层应用程序,您将希望利用它。您还将希望通过在注册表中打开性能计数器来调整池的实际工作负载。

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

人们在OracleConnections中遇到很多问题的另一个问题是垃圾收集器不知道他们是如何真正的资源密集型,并没有及时清理它们。这是因为ODP.NET没有完全管理,所以一些资源从垃圾收集器中隐藏起来。因此,最好的做法是关闭()AND Dispose()所有Oracle ODP.NET对象(包括OracleConnection)来强制清除它们。 (:ODP.NET,管理驱动器现在可用。EDIT)

基督教吉文

这一具体问题将在甲骨文公司的全面管理的供应商(测试版会出来不久)

得到缓解

Oracle

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

[的

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