2

我正在重構一些基於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,所以我並不想完全改變這一切。

因此,它是線程安全的採取工廠,並從多個線程使用它?

回答

1

MSDN說: -

線程安全:

任何公共靜態(共享在Visual Basic中)這種類型的成員 線程安全的。任何實例成員不保證是線程 安全。

+0

Ya這是幾乎庫中每個類的默認消息。考慮到課堂上沒有任何其他文件,這意味着「他們還沒有到處記錄它」IMO。 –

+0

@凱文: - 是的,甚至海事組織我都會同意! –