簡體   English   中英

ASP.NET/ADO.NET:處理.NET對象內的許多數據庫連接?

[英]ASP.NET/ADO.NET: Handling many database connections inside a .NET Object?

我們有一個.NET對象,可以對數據庫進行大量的讀/寫操作。 在整個對象的生命周期(或使用它的asp頁面)中,它可能會在1到10次的查詢/更新中命中數據庫。

每次對象需要訪問數據庫時,它都不是打開和關閉數據庫連接,而是在實例化期間打開與數據庫的連接,然后在對象的終止事件期間關閉連接。 這是一種不好的做法嗎?

假設由於對象在每次實例化時(通常多次)都會訪問數據庫,因此最好在對象生命的開始處打開一個連接,然后在結束時關閉它。

另一種方法是在每次查詢/操作之前和之后打開和關閉數據庫連接。

為了最大限度地提高性能,這里最好的做法是什么?

****更新****感謝提示家伙。 任何人都可以更多地談論在對象的實例化/終止事件中打開/關閉連接的方法以及這樣做的后果嗎?

根據需要打開關閉連接。 ADO.NET內置了連接池,可以工作。 除非您在數千個打開/關閉的循環中執行此操作,否則您不會注意到任何性能問題。

編輯請參閱我應該在數據訪問層中保留sqlconnection嗎? 有關連接持久性的缺陷的更多信息。

每次打開和關閉......在實際執行數據庫操作的代碼行之前立即打開(盡可能接近),然后立即關閉。 當您以這種方式執行此操作時,ADO.net實際上不會關閉連接,它只是將其釋放回ADO.net連接池,它位於此處並等待下一個具有相同連接字符串的連接請求。 你不是每次都要重新創建連接的ovberhead ......

唯一的問題是,如果您異步進行如此多的連接嘗試,超過了池中的最大連接數....並且還有解決此問題的方法,使用System.Threading.ThreadPool類...

要增加對連接池參數的信任 - 保持連接打開的時間超過所需時間實際上會降低整體性能,因為連接池無法與需要數據庫連接的其他組件共享該連接。

所以,是的,根據需要打開和關閉連接。 但是,如果您可以將查詢批量處理為單個exec調用,則會更快。

即使ado.net實際上沒有關閉連接,當你這樣做時:Conn.Close()它在服務器上執行“sp_reset_connection”,即使sp_reset_connection是一個輕量級存儲過程,它也會產生一些網絡流量。 因此,例如,我不建議在循環內關閉和打開連接。

暫無
暫無

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

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