gpt4 book ai didi

c# - 如何安全地使用 ADO.NET IDbConnection 和 IDbCommand 并发执行多个数据库命令?

转载 作者:太空狗 更新时间:2023-10-29 21:55:59 25 4
gpt4 key购买 nike

目标

使用 ADO.NET IDbConnection 和 IDbCommand 同时对同一个数据库执行多个命令,前提是ADO.NET 实现是在运行时指定的

调查

IDbConnection 的 MSDN 文档没有指定任何线程限制。 SqlConnection页面有标准免责声明“不保证任何实例成员都是线程安全的。IDbCommandSqlCommand文档同样没有提供信息。

假设没有单个实例成员是线程安全的,我仍然可以从一个连接(在同一线程上)创建多个命令,然后在不同线程上并发执行它们。

大概这仍然无法达到预期的效果,因为(我假设)在与数据库的单个底层连接上一次只能执行一个命令。因此并发的 IDbCommand 执行将在连接处被序列化。

结论

所以这意味着我们必须创建一个单独的 IDbConnection,如果您知道您正在使用 SqlConnection 就可以了,因为它支持池化。如果您的 ADO.NET 实现是在运行时确定的,则无法做出这些假设。

这是否意味着我需要实现自己的连接池以支持对数据库的高性能多线程访问?

最佳答案

您将需要管理对实例成员的线程访问,但大多数 ADO 实现管理它们自己的连接池。他们通常希望同时运行多个查询。

我会根据需要随意打开和关闭尽可能多的连接,并处理在池不可用时可能抛出的异常。

这是关于 ADO connection pooling 的文章

关于c# - 如何安全地使用 ADO.NET IDbConnection 和 IDbCommand 并发执行多个数据库命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2206808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com