我們都知道,一旦我們完成使用它們,我們應該丟棄一次性對象。問題是:如果我在Windows桌面應用程序的整個生命週期(例如WPF或WinForms)中使用了一次性對象(例如數據庫上下文):是否應該在應用程序關閉事件中處理該對象(爲什麼,何時,當沒有)?處理Windows桌面應用程序的一次性依賴關係
回答
作爲一項規則,您應該避免擁有一次性對象,這些對象在您的應用程序的整個生命週期中都存在。許多對象,例如數據庫上下文,只有不應該在該範圍內使用。
如果你真的需要這樣做,它取決於對象是否「正確」實現了IDisposable模式。如果一次性對象實現了一個終結器,那麼即使你沒有調用Dispose
,它也會在應用程序結束時處理。如果對象沒有實現終結器,那麼當應用程序關閉時,您將需要處理它,除非它泄漏的資源不是問題。例如,如果它泄漏的內存將在流程結束時關閉,則不需要釋放它,如果它只是要取消訂閱事件,則無需運行,等等。如果您不確定如果您不確定什麼正好正在發佈的Dispose
方法,那麼你應該是安全的,無論如何調用它。
有幾點我不明白你的答案,第一個關於數據庫上下文,如果我的應用程序使用本地數據庫(例如SQL CE),爲什麼我需要處理每個操作的上下文,再加上我通過IoC注入我的上下文,並將它們聲明爲單例。關於進程關閉的第二點,進程關閉時,它是否回收應用程序使用的每個資源,如內存段,文件,db等等,如果是這種情況,爲什麼處置這些資源。謝謝 – 2013-02-11 17:43:54
@Sniffer不,當一個進程關閉時,它不會總是能夠回收dispose方法所需要的資源。除非您明確知道在Dispose方法中回收的所有資源在流程被拆除時會自動發生,否則您應該處理它。至於數據庫上下文;你會佔用大量的資源,並始終保持開放狀態。它被設計爲一個用於單個事務的短期對象。 – Servy 2013-02-11 17:49:56
- 1. Ansible的處理程序依賴關係
- 2. 如何處理應用程序依賴關係到3D方
- 3. 處理依賴關係並保持應用程序可插入
- 4. Android應用程序依賴關係ClassNotFoundException
- 5. 虛擬應用程序依賴關係
- 6. WPF應用程序+ SQL依賴關係
- 7. 在Windows下打包依賴關係的應用程序
- 8. Windows:安裝應用程序+依賴關係
- 9. 管理Play Framework應用程序中的依賴關係
- 10. 處理SVN中的依賴關係
- 11. 處理插件的依賴關係
- 12. 使用靜態庫和應用程序管理依賴關係
- 13. JMS - 異步處理 - 處理父/子進程依賴關係
- 14. 如何處理Android依賴關係
- 15. gnu如何處理依賴關係?
- 16. 自動處理依賴關係
- 17. 處理運行時依賴關係
- 18. 處理Objective-C#import依賴關係
- 19. StructureMap嵌套依賴關係處理
- 20. 處理彈簧依賴關係
- 21. 如何處理Linux/Python依賴關係?
- 22. 處理C++依賴關係(跨平臺)
- 23. Maven&Nexus處理SNAPSHOT依賴關係
- 24. 依賴關係的nuget依賴關係
- 25. 何處移動構建一次性依賴關係以提高可測試性?
- 26. .net遠程處理依賴關係/引用問題
- 27. 依賴關係排序與循環依賴關係的檢測
- 28. 管理依賴關係
- 29. JavaScript依賴關係管理
- 30. 從控制檯應用程序引用PCL的依賴關係
您的數據庫上下文*不應該在應用程序的整個生命週期中都存在。它們不是被設計成長壽命的物體。當您執行每個數據庫操作時,您應該重新創建它們。 – Servy 2013-02-11 17:11:12