2012-09-05 51 views
2

我知道這個問題已經被問到,但我的問題比我見過的其他問題更普遍。爲什麼不總是處置?

當我在我的程序我使用的控制檢查Forms,併爲DB(命令,讀者等)的命令,以下問題來找我:

如果我有一個控制,不應該我使用它後我是否使用Dispose

這樣我會確保我的程序只使用所需的資源,如果我必須使用已經處理的控件,那麼我將再次加載它。

也許有一個理由不總是處置一切,但這就是爲什麼我問這個問題。

感謝您的任何答案,我希望我明確自己。

+0

您甚至沒有提及或標記您正在談論哪種語言。我猜C#? –

+0

是的C#。我加了標籤。謝謝 –

+0

「如果我必須使用一個被處置的控制器」哦,但如果你必須稍後使用,你不會放棄某些東西,對吧? – Prasanth

回答

4

是的,如果沒有具體的理由反對它,你可能應該處置一切。在處置FormForm時,控制系統會自動處理。

不處理UI資源不是很有害。這只是多一點內存,系統資源使用超過必要。這在大多數情況下不是功能性問題。

這當然與數據庫連接和文件相反!處理它們是至關重要的。

+0

如果處置很關鍵,那麼有些事情會被破壞。它應該總是可能的(並且,對於某個詞的價值來說,「安全」)不能被處置。 – cHao

+0

@cHao我不認爲這是真的:考慮到文件被鎖定的時間不確定,因爲FileStream不處理。或者一個事務泄漏到下一個HTTP請求中,因爲它在前一個請求中沒有結束。這兩個例子都是永久性的穩定問題。他們造成隨機行爲。他們是*必須修復*。 – usr

+0

而這兩個例子都是其他的破碎。如果您需要立即提供文件,請將其關閉*。如果您不希望在下一個請求中激活該事務,則可以將其回滾或提交*。這兩個都是濫用Dispose來做它不應該做的事情的例子。它有一份工作,那份工作不會爲你回退你的交易。 *如果您使用的交易價值不菲,那應該已經完成​​了*。 – cHao

7

您創建的非可視化組件(命令,讀取器,I/O組件,基本上任何實現了IDisposable的任何組件)都應在完成後處置。

對於視覺控,FormDispose功能應釋放所有控件中,將自動Controls集合,所以你只需要擔心你從形式的Controls出於某種原因刪除控件。

除非您遇到嚴重的內存問題,否則可能會嘗試手動處理表單控件並進行微型優化。

0

如果您使用的是非託管資源,那麼是的。繼續執行IDisposable,即使用using將簡化您的工作。但並非總是如此,至於你的問題。您的控件(UI控件)已經實現了此IDisposable,並在關閉時由其父項調用。

0

是的,你應該。在Windows Forms窗口(或分別在容器中),窗體設計器會爲您執行此操作:

protected override void Dispose(bool disposing) 
{ 
    if(disposing && (components != null)) 
    { 
     components.Dispose(); 
    } 
    base.Dispose(disposing); 
} 
相關問題