0

Windows Phone 앱을 개발 중입니다. 내 페이지 중 하나는 메모리를 많이 차지하면서 많은 UIElements를로드하는 파노라마를 사용합니다. 해당보기로 이동할 때마다 페이지가 다시 생성되므로 페이지 인스턴스를 재사용 할 수있는 방법이 있습니까? 아니면 UIElements가 두 번 이상 생성되지 않도록하는 다른 방법이 있습니까?PhoneApplicationPage 인스턴스 재사용

편집은 다음 다음

탐색 과정은 다음과 같습니다

HomePage -> Secundary Page 
Back 
HomePage -> Secundary Page 
Back 
HomePage -> Secundary Page 
etc. 

내가 원하는 것은 secundary 페이지 인스턴스가 처음 탐색 한 후 재사용 할 수 있다는 점이다.

감사합니다.

+0

응용 프로그램의 탐색 흐름에 문제가있을 수 있습니다. 같은 페이지로 여러 번 탐색하는 이유는 무엇입니까? –

+0

홈 페이지에 표시되는 항목 목록을 사용자가 페이지로 이동 한 다음 다시 돌아가서 다른 항목을 살짝 눌러 페이지로 돌아갈 수 있습니다. – DVD

답변

1

PhoneApplicationPage의 라이프 사이클이 완전히에 의해 관리됩니다 런타임에 영향을 줄 수는 없습니다. 사용자가 페이지에서 돌아 가면 다음 번에 다시 생성됩니다. this document, "OnNavigatedFrom 메서드"절을 참조하십시오. 당신이 절대적으로 메모리에 보조 페이지를 유지하려는 경우

사실, 당신은 보조 페이지에 정상 뒤로 버튼 동작을 재정의 할 수 있으며, 대신 다시 메인 페이지로 를가는, 당신은 앞으로 을 가고 싶어 메인 페이지. 물론 KooKiz의 대답에서 언급 된 부작용을 피하기 위해 백 스택을 순서대로 유지해야합니다.

가비지 수집기가 결정할 때까지 보조 페이지가 메모리에 남아 있다고 보장 할 수는 없습니다. 더 많은 메모리 페이지가 소비 될수록 더 나은 GC 후보가됩니다.

+0

이 답변으로 문제가 해결 되었다면이를 수락하는 것을 고려해보십시오. 다른 사람들도이 지식을 활용할 수 있도록하십시오. – Haspemulator

1

문제는 보조 페이지로 이동 한 후 기본 페이지로 이동하는 방법입니다.

내 생각 엔 보조 페이지에서, 당신이 전화하는거야,이다 : 당신이 눈치

  • , 당신은 새를 만듭니다 :이 두 가지 이유, 잘못

    NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Absolute)); 
    

    페이지의 인스턴스를 매번 사용하므로 많은 양의 메모리를 사용합니다.

  • 응용 프로그램을 종료하려면 사용자가 주 페이지로 이동 한 횟수만큼 뒤로 이동해야합니다.
메인 페이지 탐색 스택을 여전히이기 때문에

대신, 그냥 메인 페이지의 이전 인스턴스를 다시 사용하는 보조 페이지에서 GoBack 전화 :

NavigationService.GoBack(); 
+0

내 편집을 확인하십시오.) – DVD

+0

@DVD 오, 그러면 보조 페이지의 인스턴스를 다시 사용할 수 있다고 생각하지 않습니다. 즉, 기본 페이지로 돌아 가면 페이지가 지워지므로 메모리에 문제가 없어야합니다. 유일한 관심사는 매번 컨트롤을 다시 만드는 데 필요한 시간입니다. 별도의 페이지를 사용하지 않고 기본 페이지의 팝업 컨트롤을 사용하여 내용을 표시 할 수도 있지만 정보를 표시하는 방법에 따라 다릅니다. –

+0

실제로 mem는 GC가 호출되기 전에 100MB 이상으로 커지며, 256MB 장치에서는 잠시 후에 항상 손상됩니다. 결국 모든 xaml을 사용자 정의 컨트롤에 넣고 수명주기를 처리하게되었습니다. 이제 XD가 40MB가 될 때마다 안정적입니다. 도움을 주셔서 감사합니다;) – DVD

관련 문제