簡體   English   中英

在.NET中管理數據庫連接的最佳實踐是什么?

[英]What are best practices on managing database connections in .NET?

關於在.NET應用程序中管理數據庫連接的最佳實踐 - 我知道,通常,傳遞連接對象是不好的。

但是,我有一些特定的好奇心:


1.我有兩個業務對象的實例,不同的類,父母 - 孩子關系(孩子是私人的。)以下哪項是最好的?

  • 保持一個私有靜態連接打開和共享,由兩個對象使用,並保持打開狀態直到父級被釋放。

  • 保持兩個私有靜態連接打開,每個對象一個,在處理對象之前不要關閉。

  • 不要保持靜態連接; 打開並隨后關閉每個需要它的方法的新連接。 但是,我的大多數方法只運行1-3個查詢,所以這看起來效率低......


我的第二個問題基本上是相同的,但對於一個單一的形式。 這里最好的是什么?

  • 保持一個私有靜態連接在表單的生命周期內打開和共享。

  • 不要保持靜態連接; 打開並隨后為需要它的表單中的每個方法關閉一個連接(同樣,每個方法只有1-3個查詢。)

(是評論)......

理論上,您不應該從業務邏輯中訪問數據庫 - 它應該位於單獨的數據訪問類中。 (例如,將來你需要將它們以XML格式離線存儲,或者使用Oracle而不是SQL Server ......你不想重寫你的業務邏輯!)

您的業​​務對象不應具有與之關聯的數據庫連接。 應該在某個DAL工廠類型方法中打開連接,檢索/構建對象,然后關閉連接並返回對象。

業務對象本身應包含業務邏輯字段和方法,這些字段和方法可能會回調數據訪問層,數據訪問層應為每個DAL方法創建新的數據庫連接。

您可以通過使用連接池來緩解您的低效率恐懼,這意味着如果您打開和關閉連接數百次,則他們可能都會使用相同的連接。 但是你根本不應該保持數據庫連接 - 尤其不是作為類的成員。

希望有所幫助!

我的理解是,只要需要,連接應該保持開放。 大多數時候我在使用語句中看到過連接,類似於

using (DBConnection db = new DBConnection(connectString))
{
    //do stuff
}

此鏈接可能會有所幫助: 使用ADO.NET的最佳實踐

這是一個有趣的摘錄。

為獲得最佳性能,請僅在需要時保持與數據庫的連接。 此外,減少打開和關閉多個操作的連接的次數。

我一直遵循在使用塊中打開連接的做法,因此總是調用Dispose方法(因此也就是Close方法)而不用擔心它。 使用這種方法,我從來沒有遇到過這樣的情況:性能不佳與過多的並發連接或過度的設置或拆除操作有關。

在回答這兩個問題時,如果您使用的是具有連接池的東西,例如ADO.NET,則應編寫查詢代碼以盡可能縮短連接。 open and subsequently close a new connection for every method that requires it. 當您關閉連接時,它將返回到連接池並在后續查詢中重用,因此您不會因打開和關閉一堆連接而導致性能下降。 優點是您不會冒泄漏您忘記關閉的連接的風險,從長遠來看,與長時間保持連接打開相比,您打開的同時連接數會更少。 應用程序是Windows窗體而不是Web窗體並不重要:保持連接盡可能短。

暫無
暫無

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

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