5

我的應用程序有性能問題,所以我開始從根來研究:「與數據庫的連接」。關閉或不關閉Oracle連接?

最好的做法說:「打開一個連接,使用和關閉,儘快爲」,但我不知道這會導致開銷,所以問題是:

1 - 「打開,使用,儘快使用ODP.NET關閉連接是最好的方法?「

2 - 有沒有辦法以及如何使用連接池與ODP.NET? 我想創建一個List來存儲一些連接字符串,並創建一個邏輯來選擇每次需要時的「最佳」連接。這是做這件事的最好方法嗎?

+2

你說的是客戶端/服務器應用程序嗎?還是三層應用程序?您是否聲明您已經對應用程序進行了描述並確定開放和關閉數據庫連接是瓶頸?或者你只是猜測性能問題可能與數據庫相關? – 2012-04-12 15:25:17

+1

這是誰的最佳做法?打開到數據庫的連接是一個昂貴且耗時的操作。因此,最好的建議是儘可能長時間保持連接暢通並使用。 – APC 2012-04-12 16:59:52

+0

賈斯汀。是的,它是一個Asp.Net應用程序,所以它是3層或4層的客戶端/服務器,「開放連接操作」不是瓶頸,但我認爲它會導致性能降低(如果使用不正確)。 – Ewerton 2012-04-12 17:22:13

回答

6

]下面是一個包含Oracle的幻燈片甲板推薦的最佳做法:

http://www.oracle.com/technetwork/topics/dotnet/ow2011-bp-performance-deploy-dotnet-518050.pdf

當您創建一個OracleConnection你自動獲得一個連接池。對於大多數中間層應用程序,您將希望利用它。您還將希望通過在註冊表中打開性能計數器來調整池的實際工作負載。

有關連接池的詳細信息,請參閱ODP.NET聯機幫助。池設置被添加到連接字符串。

人們在OracleConnections中遇到很多問題的另一個問題是垃圾收集器不知道他們是如何真正的資源密集型,並沒有及時清理它們。這是因爲ODP.NET沒有完全管理,所以一些資源從垃圾收集器中隱藏起來。因此,最好的做法是關閉()AND Dispose()所有Oracle ODP.NET對象(包括OracleConnection)來強制清除它們。 (:ODP.NET,管理驅動器現在可用。EDIT)

基督教吉文

這一具體問題將在甲骨文公司的全面管理的供應商(測試版會出來不久)

得到緩解

Oracle

1

ODP.NET是ADO.NET的數據提供者。 ADO.Net的最佳實踐是打開,獲取數據(到內存),關閉,在內存中使用數據。 例如使用OracleDataReader將數據加載到內存中的DataTable中並關閉連接。

[的

0

對於單個事務來說,這是最好的,但對於多次事務而言,最終提交時可能不是最佳解決方案。您需要保持連接處於打開狀態,直到事務提交或回退。你如何管理它,以及如何檢查在這種情況下連接仍然存在?(即網絡故障)有ConnectionState.Broken屬性,此時不起作用。