[英]Are DbProviderFactory, DbConnection, DbCommand, and DbDataAdapter Thread-Safe?
[英]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()
方法的SqlClientFactory
的msdn 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.