2009-09-01 54 views
2

我在家裏的服務器上有一個SQL服務器(這是一個1GB RAM的Atom處理器),我用它來存儲一個或兩個我的應用程序的數據。我想知道是否應該在程序啓動時創建一個DataContext對象,然後在應用程序的整個生命週期內保持它,或者只在必要時創建連接。如果應用程序突然死亡會發生什麼?連接被清理了嗎?只有當我需要改變某些東西時才維護一個連接或打開?

回答

2

除非您將DataContext對象交給一個已經打開的SqlConnection,否則在完成數據庫操作後DataContext會自動關閉數據庫連接。所以它不會保持連接打開。您可以通過查看Reflector中的DataContext類來看到這一點,或者您可以閱讀ASP.NET MVC Tip #34: Dispose of your DataContext(or Don't)博客文章。所以即使你的DataContext對象繼續存在,也不應該有任何開放的數據庫連接。

如果你正在處理DataContext之外的數據庫連接,並保持它打開,那麼你真的不應該這樣做。通常,您應該在需要它們的時間和地點創建和使用資源,包括DataContext對象。沒有必要保持打開數據庫連接而沒有任何需求,關閉數據庫連接以便將其釋放回池中以提供另一個數據庫連接請求。正如我所說的,如果你讓DataContext處理數據庫連接,就數據庫連接而言,你不需要做任何特殊的事情。

如果你的應用程序突然崩潰並終止,你應該沒問題,因爲everyhing會死掉,包括開放數據庫連接和與你的應用程序域相關的底層連接池。

+0

很高興知道,聽起來像我只是保持一個窗口範圍的數據上下文對象。 – RCIX 2009-09-02 00:35:21

1

當您需要時調出數據上下文,並在完成後擺脫數據上下文。
擁有一個全局數據上下文意味着您必須將其傳遞給需要它的所有內容。 (你寫的每個需要訪問數據庫的方法在其簽名中都有一個額外的參數)。

擁有一個單一的全局數據上下文也將成爲一個痛苦,如果你決定多線程你的應用程序之一。

0

你看過.NET中的SQL連接池嗎?看看文章http://msdn.microsoft.com/en-us/library/8xx3tyca%28VS.80%29.aspx。連接池會爲您處理所有骯髒的工作,並在您的程序中出現錯誤後自動清理。在重新使用連接時效率非常高,因此重新使用連接的開銷很小(在程序啓動時創建第一個連接的成本仍然相同)。對於小型應用程序來說這可能是過度的,但對於大型項目來說,這可能是一個好習慣。

+0

這似乎與SqlConnections處理,而我使用自定義的DataContext對象... – RCIX 2009-09-02 00:14:59

相關問題