[C#] Database Connection Open 與 Close的時機
前言
對資料庫進行存取操作,幾乎是每天都會做的事情,
而一直以來心中都有一個疑問,
究竟是執行每個Function都對Connection做一次Open、Close比較好,
還是開啟Connection後,一次對資料庫做完所有的Query,再關閉連線比較好呢?
實際演練
坐而言不如起而行,實際測試的數據是不會騙人的,
因此,就來動手寫寫Function測試看看吧!
我建立了一個簡單的資料表,結構如下
另外也準備了兩個不同的方法來將資料塞入資料表中
每次操作都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();
執行結果:
結語
從測試的結果我們可以發現,
每次操作都開關連線所花的時間,大約為所有動作只開一次連線的三倍,
比較好奇的是,雖然SqlConnection有實作Pooling機制,
但在執行相當大量的操作時,SqlConnection的開關還是會耗損一定量的時間,
若在做系統優化的時候,或許可以將此環節考慮進去。
如果有任何錯誤,請各位多多指教囉!