2016-08-14 57 views
0

我想知道哪種方法更好,在一系列o線程之間共享單個odbc連接,使用互斥鎖確保沒有併發問題,或者每個線程有一個線程並不使用互斥鎖。我沒有看到它們中的任何實質優勢,但也許odbc實現中有些東西我缺少。ODBC單連接或每個線程一個

我試圖尋找類似的問題,但如果它已經

回答

-1

我認爲這取決於你想達到你實現什麼之前回答找不到任何東西,對不起。只有一個與大量線程的共享連接將導致線程被阻塞並等待連接可用。這可能會降低性能。如果你有大量的線程,我寧願創建一個連接池來處理連接的創建,使用和關閉。

+0

我想我會使用one-per-thread方法。謝謝! –

+0

這不是一個答案,而是一個評論。 – Olaf

0

ODBC驅動程序管理器已提供連接池:https://msdn.microsoft.com/en-us/library/ms716319(v=vs.85).aspx

連接池允許使用從 池不需要重新建立每個使用連接的連接的應用程序。

簡而言之:如果連接是由您的應用程序發佈,並啓用了連接池,驅動程序管理器會也許不會立即關閉連接,但保持了一段時間開放。如果您的應用程序請求打開一個新連接,則驅動程序管理器可能會從其池中返回一個已打開的連接。

所以:我不會在乎你的線程中的所有鎖定,但只是啓用連接池,並讓每個驅動程序使用自己的連接。

請注意,您可以在進程級別或每個環境句柄啓用連接池 - 見文檔中的言論:

通過調用SQLSetEnvAttr到 SQL_ATTR_CONNECTION_POOLING環境屬性設置爲 啓用連接池SQL_CP_ONE_PER_DRIVER或SQL_CP_ONE_PER_HENV。

相關問題