2011-03-10 5 views
3

제 질문은 WPF에서의 메모리 처리에 관한 것입니다. 나는 notining으로 사용자 정의 컨트롤을 만들었지 만 XAML witch에는 표준 WPF 컨트롤 만 포함되어 있습니다. 이 시점에서 코드 숨김으로 코드를 구현하지 않았습니다.내 사용자 지정 WPF 사용자 정의 컨트롤을 삭제해야하는 시점은 언제입니까?

내 응용 프로그램에서이 사용자 정의 컨트롤의 인스턴스를 만들어 사용자에게 표시합니다. 더 이상 사용자 정의 컨트롤이 필요하지 않으면 참조 변수에 null 값을 할당 할 수 있습니다.

.Dispose 메서드를 직접 작성하고 내부 컨트롤을 사용자 정의 컨트롤에 배치해야합니까? 또는이 작업을 가비지 수집기에 맡기는 것이 좋습니다. 감사.

답변

6

일반적으로 WPF에서는 컨트롤을 만들 필요가 없습니다 IDisposable. Windows Forms와 달리 WPF UIElement 개체는 완전히 관리되며 네이티브 핸들을 (일반적으로) 래핑하지 않습니다. 따라서 처분 할 필요가 없으며 가비지 수집기에 맡길 수 있습니다.

UserControlIDisposable을 구현하지 않습니다.

물론 예외가 있습니다. 예를 들어 클래스가 HwndHost (예 : WebBrowser)에서 파생되는 클래스를 캡슐화하는 경우 캡슐화 된 컨트롤에서 Dispose()을 호출하기 위해 클래스 IDisposable을 만들려고합니다. 일반적으로 interop 시나리오 (예 : WebBrowser, 기본 브라우저 컨트롤과 상호 작용)에서만 필요합니다.

+0

폼에 많은 텍스트 상자 (또는 WPF에 상응하는 것이 무엇이든지)를 놓는 것이 많은 핸들을 소비하지 않는다는 것을 의미합니까? –

+0

@Lasse : WPF의 큰 장점 중 하나는 1000 개의 텍스트 상자를 가진 Window가 1 개의 핸들, 즉 Window의 핸들을 사용한다는 것입니다. 내부는 모두 단일 HWND 내에서 Direct3D를 통해 렌더링됩니다. 각 TextBox는 Windows Forms와 달리 WPF에서 별도의 핸들을 사용하지 않습니다. (몇 가지 드문 예외가 있습니다 - 내가 설명 편집 ...) –

+0

좋은, 감사합니다 :) :) –

관련 문제