2013-01-24 2 views
1

WPF의 wpf 데이터 격자 컨트롤에서 상속 된 사용자 정의 데이터 격자 컨트롤을 만들었습니다.WPF 사용자 정의 컨트롤 및 메모리 관리 처리

그래서 사용자가 데이터베이스에 쿼리 할 때 수백 개의 레코드가 각각 15에서 20 개의 열로 반환됩니다.

나는 화면을 제어 할 때이 스크린에 할당 된 모든 메모리와 그리드가 GC에 의해 교정되어야한다고 생각했다. 그러나 이것은 사실이 아닙니다.

Red Gate의 메모리 프로파일 러에서 응용 프로그램을 테스트 중이 었습니다. 할당 된 메모리 30MB의 화면을 열 때 표시됩니다.

그러나이 화면을 닫으면 응용 프로그램이 아무렇게나 그 메모리에 고정되어 있습니다. 그 이유는 개미 메모리 프로파일 러에서 이유를 조사 할 때 내 사용자 지정 DataGrid 때문에 메모리가 남아있는 것입니다.

사용자 정의 컨트롤에 언로드 이벤트를 추가하고 프로세스 중에 첨부 한 모든 이벤트 처리기를 분리했습니다.

나는 무엇을 놓쳤으며 무엇을해야합니까?

답변

0

UserControl을 처리 할 필요가 없으며 IDisposable UserControl을 구축하지 않아야합니다. 그것은 디자인 냄새입니다. 메모리 프로파일 러가 을 말하면 왜 응용 프로그램이 여전히 해당 메모리를 보유하고 있으며 그 버그를 수정해야합니다.

업데이트 :

실제로는 Instance Retention Graph 기능을 사용 ANTS에 그 메모리에 들고 누가 찾을 수 있습니다. .NET 메모리 프로파일 러 (ANTS보다 선호하는)에서는 Root Path이라고합니다.

+0

그래,하지만 방금 내 컨트롤을 언로드하면 모든 메모리를 해제하고 있는지 확인해야하는지 묻고 싶습니다. – MegaMind

+1

수 없습니다. 더 이상 필요하지 않으면 자동으로 해제됩니다. 귀하의 경우에는 어딘가에 여전히 * 필요합니다. 당신이 가지고있는 버그를 고쳐서 만 할 수 있습니다. 당신은 그 기억을 가지고있는 사람을 찾아 내고 이것이 일어나지 않는 방법을 찾아야합니다. – bitbonk

관련 문제