5

我的应用程序有性能问题,所以我开始从根开始调查:“与数据库的连接”。

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

1 -“尽快打开、使用、关闭连接是使用 ODP.NET 的最佳方法吗?”

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

4

3 回答 3

6

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

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

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

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

人们在使用 OracleConnections 时经常遇到的另一个问题是,垃圾收集器没有意识到它们是真正的资源密集型,也没有及时清理它们。由于 ODP.NET 没有完全托管,因此一些资源对垃圾收集器隐藏,这使情况更加复杂。因此,最佳实践是关闭()和处置()所有 Oracle ODP.NET 对象(包括 OracleConnection)以强制清理它们。

这个特殊问题将在 Oracle 的完全托管提供程序中得到缓解(很快就会发布测试版)

(编辑:ODP.NET,托管驱动程序现在可用。)

克里斯蒂安·谢伊

甲骨文

于 2012-04-14T20:02:06.747 回答
1

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

[]的

于 2012-04-12T16:58:13.927 回答
0

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

于 2012-12-18T22:16:24.930 回答