2013-05-07 72 views
1

我正在編寫一個生成站點地圖的程序。爲了避免重複,我使用MSSQL Server來存儲找到的鏈接。在這個過程中,它可能會讀寫數以百萬計的鏈接,讀寫過程之間可能會有很小的差距(我的意思是每次訪問數據庫之間的時間非常短)。長時間打開sql連接

我想知道如果我可以在程序啓動時打開連接並在最後關閉它。請考慮創建一些站點地圖可能需要幾天才能完成。或者每次我想訪問數據庫時打開和關閉連接是否明智?

順便說一下,我在本地使用sql server。

回答

3

您的問題的答案是Connection Pooling功能。

它始終是最好立即

確實是一個具體的工作模式存在

using(SqlConnection con = new SqlConnection(.....)) 
{ 
    ... do your work with the database here .... 
} 

using statement確保對象創建只是打開連接需要時,訪問數據,關閉和處置的連接在開口處關閉並放置在閉合支架處。 即使在數據庫代碼中發生異常

這並不意味着您不能嘗試優化您的代碼。例如,您可以將幾個站點地圖集中在一起並一次性寫入,但通常最好遵循一個簡單的工作模式,儘快完成工作,並在稍後進行優化。

+0

這正是我所需要的。非常感謝。 – 2013-05-07 10:19:27

0

您可以用下面的代碼工作:

SqlConnection conn; 
try 
{ 
    conn = new SqlConnection(_dbconnstr)); 
} 
catch 
{ 
    //exceptions are bubbled 
    throw; 
} 
finally 
{ 
    //Dispose is always called 
    conn.Dispose(); 
} 

希望這有助於!

0

我每次使用時都會打開和關閉連接。 當週圍有很多連接時,必須完成釋放資源。 如果你是唯一一個,你可能會保留你的資源。 請注意設置超時連接。

祝你好運!

+0

看看史蒂夫的回答很好,我想你也應該使用它。 – 2013-05-07 10:20:21

+0

問題是如果你應該打開和關閉連接。不是如何去做。 – 2015-08-06 13:54:21

0

最好打開/關閉連接。在打開連接時沒有任何好處。 ADO.NET Connection pooling(默認情況下處於啓用狀態)將負責關閉哪個連接以及何時關閉。

MSDN

注意建議您關閉數據庫連接時 你爲了使用完要返回 到連接池。這可以通過使用Connection對象的Close或Dispose 方法來完成。不明確 關閉的連接可能不會被添加或返回到池中。例如,如果已達到最大 池大小並且連接仍然有效,則已經超出範圍但未明確關閉 的 連接將僅返回到連接池。

0

如果您知道需要一段時間,那麼寫入本地數據表,然後當您達到閾值時,將所有記錄寫入數據庫。

甚至寫信息到本地文件(您所選擇的格式),然後寫一個文件到數據庫中的一個鏡頭(或者多個鏡頭,如果你想這樣做,每隔X記錄或y分鐘。)