我會有一個數據庫對象,可以從多個線程以及從主線程訪問。我不希望他們同時訪問底層的數據庫對象,所以我會編寫一系列可以從多個線程訪問的線程安全公共方法。可以使用Control.Invoke而不是使用鎖嗎?
我的第一個想法是圍繞我的連接使用lock
,例如lock(oleDbConnection)
,但問題是我必須鎖定主線程,因爲它是一個可以訪問它的線程。這將意味着重寫大量的代碼。
但是,由於這些線程和主線程不會經常訪問數據庫,所以每次我從另一個線程調用任何數據庫方法時,只需使用我的控件的一些(可能是主窗體的)方法Invoke
方法。這樣,據我所知,這些方法將永遠不會同時調用,我不需要擔心主線程。我想唯一的問題會降低性能一點點,但正如我所說,數據庫不經常訪問;我使用線程的原因並不是它們可以同時訪問數據庫,而是可以同時執行其他操作。
這聽起來像個好主意嗎?我錯過了什麼嗎?聽起來有點太容易,所以我很懷疑。
如何在C#上使用連接池? – Juan
您可以創建一個連接字符串,例如'Server = myAddress:myPortNumber; Database = myDataBase; UID = myUsername; PWD = myPassword; Max Pool Size = 100; Min Pool Size = 10;'然後在每個方法中創建並關閉連接。如果池中有可用的連接,您將從那裏獲得連接(在這種情況下不會創建新的連接,並且close將連接返回到池) –