簡體   English   中英

ADO.NET命令和連接對象(odp.net)的壽命

[英]Lifespan of ADO.NET command and connection objects (odp.net)

我正在做一些工作來更新我們公司用來在Oracle數據庫上調用存儲過程的數據訪問庫。 該庫當前允許調用應用程序使用單個OracleCommand(IDbCommand)對象和單個OracleConnection(IDBConnection)進行多個調用。 這意味着呼叫者將為呼叫添加參數,進行呼叫,清除參數並重復。 完成后,使用者應用程序調用dispose清理所有內容。

通過使用庫中的“ using”語句,確保每次調用后都會清理命令和連接對象,我可以使事情更加整潔,但這意味着上述功能將丟失,並且每次調用都會創建一個新的命令/連接。 我發現在我發現的大多數示例中都是這樣做的,但是通常它們只是簡單的示例。

我的問題:允許命令和/或連接在兩次調用之間持久存在是否值得? 每次重新創建它們是否過於昂貴?

它與可伸縮性有關。 創建和配置命令的成本很便宜。 保持連接斷開是昂貴的部分。 如果您有1000個活動的客戶端擁有1000個打開的連接,則這是數據庫的負擔。 我經常握住連接對象,但只是關閉連接。 這減輕了數據庫的負擔,在.NET中保存連接對象的開銷很小。 在典型的最終用戶程序中,連接僅使用一小部分時間,因此在不使用時關閉連接,那1000個用戶可能只有10個活動連接。 現在,諸如數據加載器之類的程序使用連接1/2的時間然后將連接保持打開狀態。

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

請注意,默認情況下,OracleConnection對象實際上是一個連接池。 這樣,您就可以讓它完成實際上為您打開和關閉連接的工作,同時仍然保持良好的性能。 您可以使用許多連接字符串屬性來控制池的大小和連接的生存期。

克里斯蒂安·謝伊(Christian Shay)

神諭

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM