繁体   English   中英

.net DbProviderFactory线程安全吗?

[英]Is the .net DbProviderFactory thread safe?

我正在重构一些基于DbProviderFactory旧代码以利用连接池,但是遇到一个简单的问题: DbProviderFactories.GetFactory()返回的对象是否是线程安全的?

现在的代码是这样的:

DbProviderFactory factory = DbProviderFactories.GetFactory("Provider String from config");
var connection = factory.CreateConnection();
connection.ConnectionString = "connection string from config";

等等,但是这是每个线程一次。 显然不是我想要的。

我想知道是否可以在所有地方使用“工厂”对象? 我可以从同一个DbProviderFactory对象的不同线程中创建多个连接吗? 我可以再次从同一工厂创建DbAdapter类吗?

尽管很愚蠢,但即使是具体的子类,MSDN文档也没有说明您是否可以这样做。 例如, CreateDataAdapter()方法的SqlClientFactorymsdn doc没有说明它是否是线程安全的。 互联网上的一些不同指南仅涉及打开SqlConnection实例,它将执行线程池化,这很好,但是如果您这样做,则:

SqlConnection connection = new SqlConnection("my connection string);
DbDataAdapter adapt = DbProviderFactories.GetFactory(connection).CreateDataAdapter();

那是线程安全的吗? 这些工厂有多少? 那里的GetFactory方法跨线程返回什么? 始终是同一个对象? 或不? 我正在修改的现有代码大量使用了DbDataAdapter ,因此我也不想更改所有内容。

那么从多个线程使用工厂并使用它是线程安全的吗?

MSDN说:-

线程安全性:

此类型的任何公共static(在Visual Basic中为Shared)成员都是线程安全的。 不保证任何实例成员都是线程安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM