2011-03-10 34 views
3

我的問題是關於WPF中的內存處理。我創建了一個帶有註釋的用戶控件,但XAML女巫只包含標準的WPF控件。此時我沒有在代碼隱藏中實現任何代碼。我需要做什麼處置我的自定義WPF用戶控件?

在我的應用程序中,我創建了此用戶控件的一個實例以顯示給用戶。當我不再需要用戶控件時,我可以將它的引用變量賦值爲空值。

我是否需要自己編寫一個.Dispose方法,並在我的用戶控件中處理內部控件?或者將這項工作交給垃圾收集器是一種好的做法嗎?謝謝。

回答

6

通常,在WPF中,您不需要製作控件IDisposable。與Windows窗體不同,WPF UIElement對象完全被管理,而不是(通常)包裝本地句柄。因此,他們不需要處置,可以留給垃圾收集器。

這就是爲什麼UserControl不執行IDisposable

當然有例外。例如,如果您的課程封裝了衍生自HwndHost(例如WebBrowser)的任何內容,則您可能希望使您的課程IDisposable在封裝控件上調用Dispose()。這通常只在互操作場景中需要(即:WebBrowser,與本機瀏覽器控件進行交互)。

+0

這是否意味着在窗體上放置大量文本框(或任何WPF等效項)不會消耗大量的句柄? –

+0

@Lasse:WPF的一個巨大優勢就是具有1000個文本框的窗口使用1個句柄 - 窗口的句柄。內部的所有內容都通過Direct3D在單個HWND中呈現。與Windows窗體不同,每個TextBox在WPF中不使用單獨的句柄。 (有一些罕見的例外 - 我編輯解釋...) –

+0

很高興知道,謝謝:) –

相關問題