我在家裏的服務器上有一個SQL服務器(這是一個1GB RAM的Atom處理器),我用它來存儲一個或兩個我的應用程序的數據。我想知道是否應該在程序啓動時創建一個DataContext對象,然後在應用程序的整個生命週期內保持它,或者只在必要時創建連接。如果應用程序突然死亡會發生什麼?連接被清理了嗎?只有當我需要改變某些東西時才維護一個連接或打開?
回答
除非您將DataContext對象交給一個已經打開的SqlConnection,否則在完成數據庫操作後DataContext會自動關閉數據庫連接。所以它不會保持連接打開。您可以通過查看Reflector中的DataContext類來看到這一點,或者您可以閱讀ASP.NET MVC Tip #34: Dispose of your DataContext(or Don't)博客文章。所以即使你的DataContext對象繼續存在,也不應該有任何開放的數據庫連接。
如果你正在處理DataContext之外的數據庫連接,並保持它打開,那麼你真的不應該這樣做。通常,您應該在需要它們的時間和地點創建和使用資源,包括DataContext對象。沒有必要保持打開數據庫連接而沒有任何需求,關閉數據庫連接以便將其釋放回池中以提供另一個數據庫連接請求。正如我所說的,如果你讓DataContext處理數據庫連接,就數據庫連接而言,你不需要做任何特殊的事情。
如果你的應用程序突然崩潰並終止,你應該沒問題,因爲everyhing會死掉,包括開放數據庫連接和與你的應用程序域相關的底層連接池。
當您需要時調出數據上下文,並在完成後擺脫數據上下文。
擁有一個全局數據上下文意味着您必須將其傳遞給需要它的所有內容。 (你寫的每個需要訪問數據庫的方法在其簽名中都有一個額外的參數)。
擁有一個單一的全局數據上下文也將成爲一個痛苦,如果你決定多線程你的應用程序之一。
你看過.NET中的SQL連接池嗎?看看文章http://msdn.microsoft.com/en-us/library/8xx3tyca%28VS.80%29.aspx。連接池會爲您處理所有骯髒的工作,並在您的程序中出現錯誤後自動清理。在重新使用連接時效率非常高,因此重新使用連接的開銷很小(在程序啓動時創建第一個連接的成本仍然相同)。對於小型應用程序來說這可能是過度的,但對於大型項目來說,這可能是一個好習慣。
這似乎與SqlConnections處理,而我使用自定義的DataContext對象... – RCIX 2009-09-02 00:14:59
- 1. 我需要通過更改vimrc來測試某些東西
- 2. 維護數據庫連接或在需要時連接?
- 3. 我需要一個功能或者某些東西在打印之前更改Internet Explorer設置
- 4. 只有當變量=「東西」
- 5. 只有當它需要變大時才改變jumbobox的高度
- 6. 當我在SearchView中寫東西時,我想打開一個ListView
- 7. PHP包含,但只有某些東西
- 8. 如果有時只需要,我應該總是返回一些東西嗎?
- 9. 是否需要CFLogin替換或缺少某些東西?
- 10. 東西要改變
- 11. 連接amadeus api需要什麼東西?
- 12. 套接字始終打開或只是在需要時打開?
- 13. 需要幫助編譯一些東西! (:
- 14. 如何在當天的特定時間打印某些東西
- 15. 當某些東西發生變化時更新mySQL表
- 16. 從外部改變一些COM「東西」
- 17. Printf以某種方式改變了一些東西?
- 18. 只有當其他連接通過某些條件時,纔會加入表格
- 19. 我需要導入一些東西才能在AS3中使用JSON?
- 20. 不確定我是否需要一個組或其他東西
- 21. 當我從PySide導入某些東西時,PyInstaller停止工作
- 22. 需要pinvoke一個.dll或東西來改變WPF中的鼠標光標
- 23. 爲什麼當我打印某些東西時,它旁邊總是有一個unicode? (蟒蛇)
- 24. 經過一段時間後用Java打印某些東西
- 25. 當我添加鏈接到某些東西時,如何防止不必要的更改?
- 26. debian cron bug或缺少某些東西?
- 27. MySQL連接需要時間打開
- 28. 只是想讀取XML片段,並改變一些東西
- 29. 變量檢查,某些東西不對
- 30. Java - 接口,方法需要返回一些東西?
很高興知道,聽起來像我只是保持一個窗口範圍的數據上下文對象。 – RCIX 2009-09-02 00:35:21