我知道這個問題已經被問到,但我的問題比我見過的其他問題更普遍。爲什麼不總是處置?
當我在我的程序我使用的控制檢查Forms
,併爲DB
(命令,讀者等)的命令,以下問題來找我:
如果我有一個控制,不應該我使用它後我是否使用Dispose
?
這樣我會確保我的程序只使用所需的資源,如果我必須使用已經處理的控件,那麼我將再次加載它。
也許有一個理由不總是處置一切,但這就是爲什麼我問這個問題。
感謝您的任何答案,我希望我明確自己。
我知道這個問題已經被問到,但我的問題比我見過的其他問題更普遍。爲什麼不總是處置?
當我在我的程序我使用的控制檢查Forms
,併爲DB
(命令,讀者等)的命令,以下問題來找我:
如果我有一個控制,不應該我使用它後我是否使用Dispose
?
這樣我會確保我的程序只使用所需的資源,如果我必須使用已經處理的控件,那麼我將再次加載它。
也許有一個理由不總是處置一切,但這就是爲什麼我問這個問題。
感謝您的任何答案,我希望我明確自己。
是的,如果沒有具體的理由反對它,你可能應該處置一切。在處置Form
和Form
時,控制系統會自動處理。
不處理UI資源不是很有害。這只是多一點內存,系統資源使用超過必要。這在大多數情況下不是功能性問題。
這當然與數據庫連接和文件相反!處理它們是至關重要的。
如果處置很關鍵,那麼有些事情會被破壞。它應該總是可能的(並且,對於某個詞的價值來說,「安全」)不能被處置。 – cHao
@cHao我不認爲這是真的:考慮到文件被鎖定的時間不確定,因爲FileStream不處理。或者一個事務泄漏到下一個HTTP請求中,因爲它在前一個請求中沒有結束。這兩個例子都是永久性的穩定問題。他們造成隨機行爲。他們是*必須修復*。 – usr
而這兩個例子都是其他的破碎。如果您需要立即提供文件,請將其關閉*。如果您不希望在下一個請求中激活該事務,則可以將其回滾或提交*。這兩個都是濫用Dispose來做它不應該做的事情的例子。它有一份工作,那份工作不會爲你回退你的交易。 *如果您使用的交易價值不菲,那應該已經完成了*。 – cHao
您創建的非可視化組件(命令,讀取器,I/O組件,基本上任何實現了IDisposable
的任何組件)都應在完成後處置。
對於視覺控,Form
的Dispose
功能應釋放所有控件中,將自動Controls
集合,所以你只需要擔心你從形式的Controls
出於某種原因刪除控件。
除非您遇到嚴重的內存問題,否則可能會嘗試手動處理表單控件並進行微型優化。
如果您使用的是非託管資源,那麼是的。繼續執行IDisposable,即使用using將簡化您的工作。但並非總是如此,至於你的問題。您的控件(UI控件)已經實現了此IDisposable,並在關閉時由其父項調用。
是的,你應該。在Windows Forms窗口(或分別在容器中),窗體設計器會爲您執行此操作:
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
您甚至沒有提及或標記您正在談論哪種語言。我猜C#? –
是的C#。我加了標籤。謝謝 –
「如果我必須使用一個被處置的控制器」哦,但如果你必須稍後使用,你不會放棄某些東西,對吧? – Prasanth