ADO.Net最佳实践-进行异步db调用时的单连接与多连接

ADO.Net最佳实践-进行异步db调用时的单连接与多连接,.net,sql,asynchronous,ado.net,odp.net,.net,Sql,Asynchronous,Ado.net,Odp.net,我使用ADO.Net连接到一些Sql Server和Oracle数据库,我想同时运行一些查询 我使用SQLServer的SqlClient命名空间和Oracle的ODP.Net中的类。对于Sql Server,我在连接字符串中添加了MARS选项,并在SqlCommand上调用异步API。Net不提供异步API,因此我必须为并发Oracle命令提供单独的线程 我的问题是,我应该如何处理连接对象?我应该为每个数据库实例创建一个DbConnection并针对单个连接异步执行命令,还是应该为每个并发命令

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

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

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


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

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

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

我现在要做的是使用单个连接,并在名为;避免在应用服务器上处理事务


希望有帮助。

你们有没有衡量过通过一个连接运行多个查询的影响?这会成为争论的焦点吗?(假设不需要支持事务。)感谢分享您的经验!我们没有正式衡量影响,但我确实记得,我们每一页请求执行40-50个查询,每分钟执行8个页面请求,没有任何惩罚(我知道,这是一个非常小的集合)。一位朋友成功地将其用于每个页面请求大约30个查询和每分钟大约50个页面请求,并且也没有任何问题。根据我在使用Oracle DB的Winform应用程序上运行RedGate Perf Profiler的经验,很明显连接创建时间是主要瓶颈,就像@Vladimir提到的+1一样