4

我正在使用 ADO.Net 连接到一些 Sql Server 和 Oracle 数据库,并且我想同时运行一些查询。

我将 SqlClient 命名空间中的类用于 Sql Server 和 ODP.Net 用于 Oracle。对于 Sql Server,我在连接字符串中添加了 MARS 选项,并在 SqlCommand 上调用异步 API。ODP.Net 不提供异步 API,因此我必须为并发 Oracle 命令提供单独的线程。

我的问题是,我应该如何处理连接对象?我应该为每个数据库实例创建一个 DbConnection 并针对单个连接异步执行命令,还是应该为每个并发命令提供一个单独的连接对象?共享连接对象是否会成为同时通过它执行的多个命令的争用点?

我将编写一些比较测试,但很想听听有异步数据库命令经验的人的意见。先感谢您!

4

1 回答 1

6

前段时间我们遇到了这个问题,并选择为每个并发命令处理一个单独的连接对象。这是一个大量使用数据库的应用程序(每个页面执行大约 40 个查询)。由于连接创建,我们看到这非常慢。

因此,我们将其更改为每个执行的命令都使用的单个连接(单例)。这解决了问题,我们很高兴看到应用程序响应速度更快。然而,应用程序开始增长,交易需求迫切,但我们面临的问题是,这在我们的模型中是不可能的。我们最终使用了一个混合:每当连接需要事务时,我们创建一个新的,如果不需要事务,那么我们重用在单例中创建的那个。

我现在要做的是使用单个连接并在调用的存储过程中使用事务模式;避免必须在应用程序服务器上处理事务。

希望对您有所帮助。

于 2012-04-20T05:01:42.567 回答