接続プーリングを利用するために に基づいていくつかの古いコードをリファクタリングしています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は、それがスレッドセーフかどうかを述べていません。インターネット上のいくつかの異なるガイドでは、のインスタンスを開くだけで、スレッドプーリングを実行しますが、これは問題ありませんが、これを行うと:SqlClientFactory
CreateDataAdapter()
SqlConnection
SqlConnection connection = new SqlConnection("my connection string);
DbDataAdapter adapt = DbProviderFactories.GetFactory(connection).CreateDataAdapter();
それはスレッドセーフですか?それらの工場はいくつありますか。そのGetFactory
メソッドはスレッド間で何を返しますか? いつも同じオブジェクト?か否か?私が変更している既存のコードはDbDataAdapter
s を多用しているので、そのすべても変更したくありません。
ファクトリを取得して複数のスレッドから使用するのはスレッドセーフですか?