我正在編寫一個生成站點地圖的程序。爲了避免重複,我使用MSSQL Server來存儲找到的鏈接。在這個過程中,它可能會讀寫數以百萬計的鏈接,讀寫過程之間可能會有很小的差距(我的意思是每次訪問數據庫之間的時間非常短)。長時間打開sql連接
我想知道如果我可以在程序啓動時打開連接並在最後關閉它。請考慮創建一些站點地圖可能需要幾天才能完成。或者每次我想訪問數據庫時打開和關閉連接是否明智?
順便說一下,我在本地使用sql server。
我正在編寫一個生成站點地圖的程序。爲了避免重複,我使用MSSQL Server來存儲找到的鏈接。在這個過程中,它可能會讀寫數以百萬計的鏈接,讀寫過程之間可能會有很小的差距(我的意思是每次訪問數據庫之間的時間非常短)。長時間打開sql連接
我想知道如果我可以在程序啓動時打開連接並在最後關閉它。請考慮創建一些站點地圖可能需要幾天才能完成。或者每次我想訪問數據庫時打開和關閉連接是否明智?
順便說一下,我在本地使用sql server。
您的問題的答案是Connection Pooling功能。
它始終是最好立即
確實是一個具體的工作模式存在
using(SqlConnection con = new SqlConnection(.....))
{
... do your work with the database here ....
}
的using statement確保對象創建只是打開連接需要時,訪問數據,關閉和處置的連接在開口處關閉並放置在閉合支架處。 即使在數據庫代碼中發生異常。
這並不意味着您不能嘗試優化您的代碼。例如,您可以將幾個站點地圖集中在一起並一次性寫入,但通常最好遵循一個簡單的工作模式,儘快完成工作,並在稍後進行優化。
您可以用下面的代碼工作:
SqlConnection conn;
try
{
conn = new SqlConnection(_dbconnstr));
}
catch
{
//exceptions are bubbled
throw;
}
finally
{
//Dispose is always called
conn.Dispose();
}
希望這有助於!
我每次使用時都會打開和關閉連接。 當週圍有很多連接時,必須完成釋放資源。 如果你是唯一一個,你可能會保留你的資源。 請注意設置超時連接。
祝你好運!
看看史蒂夫的回答很好,我想你也應該使用它。 – 2013-05-07 10:20:21
問題是如果你應該打開和關閉連接。不是如何去做。 – 2015-08-06 13:54:21
最好打開/關閉連接。在打開連接時沒有任何好處。 ADO.NET Connection pooling(默認情況下處於啓用狀態)將負責關閉哪個連接以及何時關閉。
從MSDN
注意建議您關閉數據庫連接時 你爲了使用完要返回 到連接池。這可以通過使用Connection對象的Close或Dispose 方法來完成。不明確 關閉的連接可能不會被添加或返回到池中。例如,如果已達到最大 池大小並且連接仍然有效,則已經超出範圍但未明確關閉 的 連接將僅返回到連接池。
如果您知道需要一段時間,那麼寫入本地數據表,然後當您達到閾值時,將所有記錄寫入數據庫。
甚至寫信息到本地文件(您所選擇的格式),然後寫一個文件到數據庫中的一個鏡頭(或者多個鏡頭,如果你想這樣做,每隔X記錄或y分鐘。)
這正是我所需要的。非常感謝。 – 2013-05-07 10:19:27