2013-02-11 56 views
2

我們都知道,一旦我們完成使用它們,我們應該丟棄一次性對象。問題是:如果我在Windows桌面應用程序的整個生命週期(例如WPF或WinForms)中使用了一次性對象(例如數據庫上下文):是否應該在應用程序關閉事件中處理該對象(爲什麼,何時,當沒有)?處理Windows桌面應用程序的一次性依賴關係

+2

您的數據庫上下文*不應該在應用程序的整個生命週期中都存在。它們不是被設計成長壽命的物體。當您執行每個數據庫操作時,您應該重新創建它們。 – Servy 2013-02-11 17:11:12

回答

0

作爲一項規則,您應該避免擁有一次性對象,這些對象在您的應用程序的整個生命週期中都存在。許多對象,例如數據庫上下文,只有不應該在該範圍內使用

如果你真的需要這樣做,它取決於對象是否「正確」實現了IDisposable模式。如果一次性對象實現了一個終結器,那麼即使你沒有調用Dispose,它也會在應用程序結束時處理。如果對象沒有實現終結器,那麼當應用程序關閉時,您將需要處理它,除非它泄漏的資源不是問題。例如,如果它泄漏的內存將在流程結束時關閉,則不需要釋放它,如果它只是要取消訂閱事件,則無需運行,等等。如果您不確定如果您不確定什麼正好正在發佈的Dispose方法,那麼你應該是安全的,無論如何調用它。

+0

有幾點我不明白你的答案,第一個關於數據庫上下文,如果我的應用程序使用本地數據庫(例如SQL CE),爲什麼我需要處理每個操作的上下文,再加上我通過IoC注入我的上下文,並將它們聲明爲單例。關於進程關閉的第二點,進程關閉時,它是否回收應用程序使用的每個資源,如內存段,文件,db等等,如果是這種情況,爲什麼處置這些資源。謝謝 – 2013-02-11 17:43:54

+0

@Sniffer不,當一個進程關閉時,它不會總是能夠回收dispose方法所需要的資源。除非您明確知道在Dispose方法中回收的所有資源在流程被拆除時會自動發生,否則您應該處理它。至於數據庫上下文;你會佔用大量的資源,並始終保持開放狀態。它被設計爲一個用於單個事務的短期對象。 – Servy 2013-02-11 17:49:56