2

接続プーリングを利用するために に基づいていくつかの古いコードをリファクタリングしていますDbProviderFactoryが、単純な質問に出くわしました: オブジェクトはDbProviderFactories.GetFactory()スレッドセーフによって返されますか?

コードは次のとおりです。

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

など。ただし、これは PER THREAD ごとに 1 回行われます。明らかに私が望むものではありません。

「工場」オブジェクトをどこでも使用できるかどうか疑問に思いましたか? DbProviderFactory同じオブジェクトから異なるスレッドで複数の接続を作成できますか? DbAdapter同じファクトリからクラスを作成できますか?

ばかげていますが、具体的なサブクラスのMSDNドキュメントでさえ、これができるかどうかはわかりません。たとえば、メソッドのmsdn docは、それがスレッドセーフかどうかを述べていません。インターネット上のいくつかの異なるガイドでは、のインスタンスを開くだけで、スレッドプーリングを実行しますが、これは問題ありませんが、これを行うと:SqlClientFactoryCreateDataAdapter()SqlConnection

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

それはスレッドセーフですか?それらの工場はいくつありますか。そのGetFactoryメソッドはスレッド間で何を返しますか? いつも同じオブジェクト?か否か?私が変更している既存のコードはDbDataAdapters を多用しているので、そのすべても変更したくありません。

ファクトリを取得して複数のスレッドから使​​用するのはスレッドセーフですか?

4

1 に答える 1

1

MSDN のコメント:-

スレッドの安全性:

この型の public static (Visual Basic では共有) メンバーはすべて、スレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。

于 2013-10-22T19:19:24.430 に答える