我使用ADO.Net连接到某些Sql Server和Oracle数据库,我想同时运行一些查询。
我使用SqlClient命名空间中的类用于Sql Server和ODP.Net for Oracle。对于Sql Server,我将MARS选项添加到连接字符串,并在SqlCommand上调用异步API。 ODP.Net不提供异步API,因此我必须为我的并发Oracle命令提供单独的线程。
我的问题是,我该如何处理连接对象?我应该为每个数据库实例创建一个DbConnection并针对单个连接异步执行命令,还是应该为每个并发命令提供单独的连接对象?共享连接对象是否会成为同时通过它执行的多个命令的争用点?
我会写一些比较测试,但很想听听有异步数据库命令经验的人的意见。提前谢谢!
答案 0 :(得分:4)
前一段时间我们遇到了这个问题,并选择为每个并发命令处理一个单独的连接对象。这是一个大量使用数据库的应用程序(每个页面执行大约40个查询)。我们看到由于连接创建,这非常慢。
因此,我们将其更改为每个执行的命令使用的单个连接(单例)。这解决了问题,我们很高兴看到应用程序响应更快。然而,应用程序开始增长,交易的需求迫在眉睫,但我们面临的问题是,在我们的模型中这是不可能的。我们最后使用了一个混合:每当连接需要事务我们创建一个新事务时,如果不需要事务,那么我们重用在单例中创建的事务。
我现在要做的是使用单个连接并在调用的存储过程中使用事务模式;避免必须在应用程序服务器上处理事务。
希望它有用。