我的应用程序有性能问题,所以我开始从根本上研究这个:“与数据库的连接”。
最好的做法说:“打开一个连接,使用和关闭,尽快为”,但我不知道这会导致开销,所以问题是:
1 - “打开,使用,关闭连接尽快使用是ODP.NET最好的形式给出?”
2 - 有没有一种方法,以及如何使用与连接池ODP.NET? 我想创建一个列表来存储一些连接字符串,并创建一个逻辑每次我需要时间来选择“最佳”连接。 这是做的最好的方法是什么?
我的应用程序有性能问题,所以我开始从根本上研究这个:“与数据库的连接”。
最好的做法说:“打开一个连接,使用和关闭,尽快为”,但我不知道这会导致开销,所以问题是:
1 - “打开,使用,关闭连接尽快使用是ODP.NET最好的形式给出?”
2 - 有没有一种方法,以及如何使用与连接池ODP.NET? 我想创建一个列表来存储一些连接字符串,并创建一个逻辑每次我需要时间来选择“最佳”连接。 这是做的最好的方法是什么?
下面是包含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),迫使他们进行清理。
这种特殊的问题将在甲骨文公司的全面管理的供应商来缓解(测试版会出来不久)
(编辑:ODP.NET,管理驱动器现在可用。)
基督教吉文
神谕
该ODP.NET是ADO.NET数据提供者。 对于ADO.Net最好的做法是打开,获取数据(内存),关闭,内存中的数据使用。 例如使用OracleDataReader在存储器和紧密连接的DataTable加载数据。
[]的
对于一个单一的交易,这是最好的,但对于那些你承诺在年底这可能不是最好的解决方案多个事务。 你需要保持连接打开,直到提交或回滚事务。 你如何管理这一点,还怎么检查连接在这种情况下还存在吗?(即网络故障)有ConnectionState.Broken财产不在这一点上工作。