2012-09-17 52 views
2

我正在做一些工作來更新我們公司用來在Oracle數據庫上調用存儲過程的數據訪問庫。該庫目前允許調用應用程序使用單個OracleCommand(IDbCommand)對象和單個OracleConnection(IDBConnection)來進行多個調用。這意味着主叫方會爲呼叫添加參數,進行呼叫,清除參數並重復。完成後,消費者應用程序調用處理以清理所有內容。ADO.NET命令和連接對象的生命期(odp.net)

我可以通過在庫中使用「using」語句來確保命令和連接對象在每次調用後都被清理乾淨,但這意味着上述功能會丟失,並且新的命令/連接會每次通話都會被創建。我發現大多數例子都是這樣做的,但通常他們通常只是簡單的例子。

我的問題:是否值得讓命令和/或連接在呼叫之間保持不變?每次重新創建它過於昂貴嗎?

回答

1

這是關於可伸縮性。創建和處理命令的成本很便宜。保持連接開放是昂貴的部分。如果您有1000個活動客戶端持有1000個打開的連接,那麼這是數據庫上的負載。我經常握住連接對象,但只關閉連接。這樣可以減輕數據庫的負擔,並且在.NET中保持連接對象的開銷很小。在一個典型的最終用戶程序中,只有一小部分時間使用連接,因此在不使用時關閉連接,這1000個用戶可能只有10個活動連接。現在,一個像數據加載程序一樣使用連接1/2的程序將打開連接。

0

同意Blam。 應該使用數據訪問類創建連接對象,並且每個執行對數據庫的調用的方法都應打開並關閉它,除非在方法之間有某種事務控制,但總體而言,對於簡單的CRUD操作的方法我建議你採取

0

請注意,默認情況下,OracleConnection對象實際上是一個連接池。因此,您可以讓它爲您實際開啓和關閉連接,同時保持良好的性能。有許多連接字符串屬性可用於控制連接池的大小和連接的生命週期。

基督教吉文

甲骨文