2012-05-02 6 views
1

저는 90 개가 넘는 항목이있는 ListPicker가있는 앱을 디자인하고 있습니다. 각 항목은 2 개의 PNG 이미지 (크기가 각각 < 3KB)와 일부 텍스트로 구성됩니다.Windows Phone 앱에서 메모리 사용량 줄이기

나는 나의 항목을 표현하는 새로운 클래스를 생성하고 난 사용하여 코드에서

List<ClassName> ClassNameList = new List<ClassName>(); 

를 사용하여 목록에 항목을 추가하는이 클래스의 목록을 만드는 오전 :에서

ClassNameList.Add(new ClassName() {var1=..., var2=...}); 

내 case, var1 및 var2는 프로젝트에 포함 된 PNG 이미지의 경로입니다.

그런 다음 <itemtemplate>에서 데이터 바인딩을 사용하여 목록에 항목을 바인딩합니다.

에뮬레이터에서 ListPicker를로드하면 메모리 사용량이 256MB를 초과하여 증가합니다. 그래서 최신 256MB RAM 폰용 앱을 제출할 수 없습니다. 메모리 사용을 줄일 수있는 방법이 있습니까?

+0

사용자가보기를 입력하고 이전 항목을 삭제할 때 격리 된 저장소에 모든 이미지를 저장하고 저장소에서 항목을로드하려고 시도하십시오. –

+0

좀 더 자세하게 설명해 주시겠습니까? 특히 당신이 내가 "오래된 항목을 삭제해야"한다고 말하는 부분. – tumchaaditya

+0

이미지를 listpicker에 추가하고 있습니다. 예를 들어, 알파벳 H로 스크롤 한 다음 H 및 G 항목을로드하면 다른 모든 알파벳 항목이 제거됩니다. 많은 예제가 목록 상자에서 지연로드와 유사하지만 여기서는 사용자가 도달 할 때 상위 항목을 제거합니다. 특정 지점. –

답변

1

이미지 파일 크기가 동일한 양의 메모리를 사용한다는 의미는 아닙니다. 종종 이미지는 압축 된 형식 (귀하의 경우 PNG)으로, 파일 크기가 줄어 듭니다. 그러나 이것은 메모리를 적게 사용한다는 것을 의미하지는 않습니다. this topic도 읽으십시오 (WPF에 관한 내용 임에도 불구하고 어떤 상황에서도 여전히 동일한 원칙입니다).

같은 사진이 많은 경우 이미지 캐싱 (예 : proxy pattern)을 사용하여 메모리의 이미지 중복을 줄이는 것이 좋습니다.

+0

나는 화제를 읽었다. 하지만로드하려는 이미지는 이미 60x60 픽셀 미만입니다. 따라서 DecodedPixelWidth를 사용하면 더 이상 문제가 발생하지 않습니다. – tumchaaditya

+0

다음 MSDN의 팁과 트릭을 따라 해 볼 수도 있습니다. http://msdn.microsoft.com/ko-kr/library/cc716879.aspx 게으른 로딩을보고 이미 모든 이미지를로드하지는 않습니다 (또한 표시된 항목 가까이에 있지 않은 이미지도 "처분"할 수 있습니다). – Styxxy