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

标签 .net sql asynchronous ado.net odp.net

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

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

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

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

最佳答案

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

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

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

希望它有帮助。

关于.net - ADO.Net 最佳实践 - 进行异步数据库调用时的单连接与多连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10239977/

相关文章:

c# - 如何在 C# 中使用 int64 索引对数组的一部分进行排序?

sql - 在 SQL Server 2016 中将Where IN 与 STRING_SPLIT 和聚合计数结合使用

php - MySQL 数据库接受远程连接,但不接受来自 PHP 的连接

sql - 在postgresql 9.1.3中执行类型转换功能与在postgresql 8.2.22中不同。串联无法正常工作

node.js - 如何将 async/await 与 mongoose 一起使用

asynchronous - Flutter:从 Future 获取值(value)的正确方法

c# - 类似于 Extension Methods Functionality - 我们可以扩展属性吗

.net - 在LINQPad中用什么数据可视化控件来呈现结果?

c# - 在 MVC 中从同步调用异步而没有等待时,TPL 任务死锁

c# - 具有通用集合参数的方法