2017-06-14 32 views
1

我有一個從SQL Server數據庫讀取和寫入的DLL。調用模塊當前在調用DLL之前設置了與數據庫的連接。VB.Net SQLClient。線程中連接的最佳實踐

模塊在不同的線程上調用DLL,因此可能有30-40個線程同時運行,這些線程都調用了DLL的公共方法。

問題是,對於SQL Server,所有線程使用相同的連接(即從主模塊傳遞的連接)還是每個連接建立它自己的連接都更好?

我目前已經知道它使用的是公共連接,但我不斷收到來自某些線程的錯誤說:「已經有一個打開的DataReader與此命令關聯,必須先關閉它」。儘管我的所有讀者都在monitor.enter/exit模塊中,所以讀者在monitor.exit(obj)之前就已經完成了。

+0

聽起來像你,回答了你自己的問題。你在一個線程上做的一些事情將阻止任何其他線程使用相同的連接來處理任何事情 – Plutonix

+1

*不要*使用公共連接。所有示例和教程都有一個'using'語句來儘快關閉連接。關閉連接將釋放服務器上使用的所有鎖和資源。連接池意味着您在下次打開連接時不必支付重新連接處罰。 –

+0

我同意其他人通過單一連接彙集所有內容會導致問題。爲什麼你想做這個與連接池並讓每個線程根據需要從池中獲取連接? – alroc

回答

0

謝謝你們的建議。傳遞連接字符串並允許線程創建自己的連接似乎解決了這個問題。 「DataReader」問題是由我在連接上創建一個閱讀器然後否定使用它引起的......嘿,嗨......