簡體   English   中英

為何總是關閉數據庫連接?

[英]Why always close Database connection?

如果連接到數據庫會消耗大量資源,那么為什么要在應用程序中關閉數據庫連接,如果必須再次打開它? 我是否可以在整個應用程序中全局使用此連接,以便其他類和方法可以重用它?

例如(偽代碼):

public class PopulateGridViews()
{
    public SqlConnection conn = new SqlConnection(@"Database:DATABASE");
    conn.Open();

    void PopulateGrid1()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE1");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid1
    }

    void PopulateGrid2()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM TABLE2");
        cmd.Connection = conn;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        // Populate Grid2
    }
}

你不應該打開連接。

你應該:

  1. 盡可能晚地打開連接
  2. 盡快關閉連接

連接本身將返回到連接池。 連接是有限且相對昂貴的資源。 您建立的具有完全相同連接字符串的任何新連接都將能夠重用池中的連接。

我們強烈建議您在使用完畢后始終關閉連接,以便將連接返回到池中。 您可以使用Connection對象的Close或Dispose方法,或打開C#中using語句內的所有連接,或Visual Basic中的Using語句來執行此操作。 未顯式關閉的連接可能不會添加或返回到池中。 有關更多信息,請參閱使用Statement(C#參考)或如何:為Visual Basic配置系統資源。 參考

您應該在using語句塊中適當地包裝實現IDisposable任何內容:

 using (SqlConnection connection = new SqlConnection(connectionString))
 {
     connection.Open();

     ...

     command.ExecuteNonQuery();
 }

因為(某些)數據庫也會保持打開連接,直到調用應用程序告知它關閉它。 如果您收到數百個對數據庫的調用,那么就會有100個打開的連接來占用資源。 在繁忙的應用程序中對數據庫進行數千或數十萬次調用並不罕見,數據庫性能遲早會破壞應用程序的性能。

這真的只是常識。 如果您有正當理由將其保持打開狀態,請執行此操作。 如果沒有,請在完成后立即將其關閉。 但最好是養成關閉連接的好習慣,這樣你就不會在不打算時將它們打開。 這是一個很好的習慣,比如你不帶食物時要戴上安全帶或關上冰箱門。

本文陳述得很好(即使它有點過時):

http://www.bewebmaster.com/84.php

托管公司的一個常見問題是ASP網站在打開后不會關閉數據庫連接。 這是您應該考慮成為強制性代碼一部分的基本步驟。 如果不關閉數據庫連接,則會出現許多問題,例如網頁掛起,頁面加載速度慢等等。

把它想象成穿過你家的大門。 也許門會自動關閉,但也許不會。 如果它沒有關閉,誰知道會發生什么。 如果你住在這個國家,一只熊可以走進去。如果你住在這個城市,一個搶劫者可以走進去。好吧,好吧,也許保持數據庫連接打開不會導致任何壞事,但它會導致你和你的托管公司都有很多不必要的麻煩。

很明顯,如果你不關閉連接而不是連續消耗你的資源,這會對你的應用程序產生整體影響,也可能不會添加或返回到池中。

暫無
暫無

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

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