[C#] Database Connection Open 與 Close的時機

  • 26947
  • 0

[C#] Database Connection Open 與 Close的時機


前言

對資料庫進行存取操作,幾乎是每天都會做的事情,

而一直以來心中都有一個疑問,

究竟是執行每個Function都對Connection做一次Open、Close比較好,

還是開啟Connection後,一次對資料庫做完所有的Query,再關閉連線比較好呢?

實際演練

坐而言不如起而行,實際測試的數據是不會騙人的,

因此,就來動手寫寫Function測試看看吧!

我建立了一個簡單的資料表,結構如下

15

另外也準備了兩個不同的方法來將資料塞入資料表中

每次操作都Open、Close連線 :

string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Temp\TestData.mdf;Integrated Security=True;User Instance=True";
string commandString = @"Insert into Person (Name,Phone) Values ('Kirk','0912345678')";

SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(commandString, connection);

for (int i = 0; i < 1000; i++)
{
    connection.Open();

    command.ExecuteNonQuery();

    connection.Close();
}

開啟連線,執行完所有動作後再關閉連線:

string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Temp\TestData.mdf;Integrated Security=True;User Instance=True";
string commandString = @"Insert into Person (Name,Phone) Values ('Kirk','0912345678')";

SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(commandString, connection);

connection.Open();

for (int i = 0; i < 1000; i++)
{
    command.ExecuteNonQuery();
}

connection.Close();

 

執行結果:

16

 

結語

從測試的結果我們可以發現,

每次操作都開關連線所花的時間,大約為所有動作只開一次連線的三倍,

比較好奇的是,雖然SqlConnection有實作Pooling機制,

但在執行相當大量的操作時,SqlConnection的開關還是會耗損一定量的時間,

若在做系統優化的時候,或許可以將此環節考慮進去。

如果有任何錯誤,請各位多多指教囉!