2010-09-24 90 views

回答

0

大多數JDBC驅動程序每個連接只使用一個套接字。我認爲MySQL也使用一個套接字。在多個線程之間共享一個連接是一個糟糕的性能想法。

如果在不同線程之間使用多個連接,那麼每個連接都需要一個CallableStatment。每個連接都需要一個CallabaleStatement池。在這種情況下,最簡單的方法是將連接類包裝並將所有調用委託給原始類。 Eclipse的創建速度非常快。在包裝方法prepareCall()中,您可以添加一個簡單的池。您還需要一個CallableStatement的包裝類。 close方法將CallableStatement返回到池中。

但是,首先你應該檢查是否真的很貴,因爲很多司機已經有這樣的民意調查。創建一個prepareCall()和close()循環並計算時間。

0

連接不是線程安全的,所以你不能跨線程共享它。

當你的prepareCall,JDBC驅動程序(可能)是告訴RDBMS系統做了很多存儲在服務器端的工作。你可能在這裏犯了過早的優化。

0

給這個稍加思考後,它看來,如果您有問題,與此基礎結構代碼,然後你的問題是在其他地方。大多數應用程序不需要花費過多的時間來完成這些工作。
確保您使用的是DataSource,大部分都是連接緩存,有些甚至是緩存語句。
也是因爲這是一個性能瓶頸,這意味着你正在一個接一個地做很多查詢,或者你的連接池太小。也許你應該在你的代碼上做一些基準測試,看看存儲過程需要多長時間,而JDBC代碼需要多少時間。
當然,我會遵循MySQL使用CallableStatement的建議,我相信他們已經對此進行了基準測試。大多數應用程序不會在線程之間共享任何內容,這很少是問題。