2013-06-16 4 views
1

Windows Phone 애플리케이션을 개발 중입니다. 내 응용 프로그램에서 Longlistselector를 사용하고 MVVM을 사용하는 이미지로 긴 목록을로드하고 있습니다. 또한 목록 뒤의 세부 정보 페이지에는 고해상도 이미지가 거의 없습니다.Windows phone 메모리 부족 예외

내 응용 프로그램에서는 페이지 1에서 페이지 2로, 페이지 2에서 페이지 1로 n 번 이동합니다. 응용 프로그램이 ArgumentOutOfRangeException 및 OutOfMemoryException을 제공하는 뒤로 탐색에서 충돌합니다.

나는 Windows 전화 응용 프로그램 분석을 수행했습니다. GC 이벤트를 보여주는 것은 자주 호출됩니다. 그러나 어떤 시점에서 응용 프로그램이 충돌하는지, 응용 프로그램에서 사용하는 메모리를 줄이거 나 정리하는 방법을 보여주지는 않습니다.

메모리 정리에 대해 알고 있고 메모리 누수를 방지하는 방법을 알고 있다면 알려 주시기 바랍니다.

답변

0

메모리 누수에 대한 가장 큰 문제는 출시되지 않은 이벤트 핸들러입니다. 일정에 가입 할 때마다 업데이트가 더 이상 필요하지 않을 때 일정을 구독 취소해야합니다. 나는 당신의 페이지 2가 실제로 당신이 1 페이지로 돌아갈 때 실제로 사라지지 않을 것이라고 생각한다. 나는 이것을 관리하는 데 도움이되는 오버로드 된 메소드 (OnNavigatingTo와 OnNavigatingFrom, 나는 생각한다) 쌍이 있다고 생각한다.

또 다른 방법은 WeakReference를 사용하고 EventAggregator로 모든 데이터를 수동으로 전달하는 것입니다. 아마도 가장 쉬운 방법은 MVVM Light Toolkit (메신저)의 일부입니다. 이 약한 참조는 이벤트 발신자가 구독자에 대한 참조를 보유하지 않습니다.

+1

메모리 프로파일 링을 사용하여 페이지 1과 페이지 2의 인스턴스가 두 개 이상 있음을 확인했습니다.이 인스턴스를 삭제하는 방법은 무엇입니까? 이러한 인스턴스는 앱 수명 동안 메모리에 저장됩니다. 또한이 인스턴스와 연관된 ViewModel이 수집되지 않습니다. 어떻게 이것을 달성합니까? – Manmath

+0

이것은 약간의 작업을 필요로하지만 어떤 객체가 페이지에 대한 참조를 가지고 있는지주의 깊게 살펴보고 null로 설정해야합니다. –

+0

즉, 페이지에서 벗어날 때 –

0

또한 Windows phone이 새로운 패러다임임을 기억해야합니다. 페이지 사이를 탐색하지 않고 페이지를 탐색하고 이전 페이지로 돌아갑니다. 항상 앞으로 나아갈 경우 탐색 스택에 페이지의 새로운 인스턴스가 생깁니다.