我正在重構一些基於DbProviderFactory
的舊代碼來利用連接池,但我遇到了一個簡單的問題:對象是否由線程安全返回DbProviderFactories.GetFactory()
?.net DbProviderFactory線程是否安全?
現在的代碼是這樣的:
DbProviderFactory factory = DbProviderFactories.GetFactory("Provider String from config");
var connection = factory.CreateConnection();
connection.ConnectionString = "connection string from config";
等等等等。但是,這是每個線程做一次。顯然不是我想要的。
我想知道我是否可以在任何地方使用「工廠」對象?我可以在同一個DbProviderFactory
對象的不同線程中創建多個連接嗎?我可以再次從同一工廠創建DbAdapter
班嗎?
儘管它很愚蠢,但即使是具體的子類的MSDN文檔也不會說你是否可以這樣做。例如,msdn doc對於CreateDataAdapter()
方法的SqlClientFactory
並不表示它是否是線程安全的。在互聯網上有幾個不同的導遊都對剛剛開放的SqlConnection
一個實例,它會做線程池,這是很好的,但如果你再這樣做:
SqlConnection connection = new SqlConnection("my connection string);
DbDataAdapter adapt = DbProviderFactories.GetFactory(connection).CreateDataAdapter();
是線程安全的嗎?有多少那些工廠存在?那有什麼GetFactory
方法在線程中返回?始終是同一個對象?或不?我正在修改的現有代碼嚴重使用DbDataAdapter
,所以我並不想完全改變這一切。
因此,它是線程安全的採取工廠,並從多個線程使用它?
Ya這是幾乎庫中每個類的默認消息。考慮到課堂上沒有任何其他文件,這意味着「他們還沒有到處記錄它」IMO。 –
@凱文: - 是的,甚至海事組織我都會同意! –