2013-05-02 4 views
2

У меня есть страница с шарниром, содержащим около 10 элементов, каждый элемент поворота содержит длинный список с 30 элементами каждый.Как оптимизировать производительность longlistselector с изображениями на телефоне Windows?

Каждый элемент longlistselector содержит изображение.

Когда я просматриваю страницу, и я переворачивать к следующему пункту поворота, то приложение падает на 4 пункте поворота с исключением памяти.

Есть ли все равно, чтобы разгрузить не отображаемые изображения в longlistselector?

+0

Насколько велики ваши изображения? Он не должен падать с таким количеством изображений, если они на самом деле не очень большие. Pivot не загружает все изображения на самом деле. При удалении изображений вы всегда можете удалять изображения с предыдущей сводной страницы. Откуда вы загружаете свои изображения? –

+0

Если это wp8, вы пробовали «Виртуализацию»? –

+0

Да, они на самом деле большие, потому что я получаю их из Интернета. – Louy

ответ

2

Я предлагаю переосмыслить ваш макет приложения, 10 элементов с поворотными элементами слишком много для нормальной навигации пользователя, почему бы и нет главной страницы с длинным списком «категорий» на странице сведений из 30 изображений.

Но если вы абсолютно должны сделать это таким образом, посмотрите на microsoft's photohub source

Я использую его лично и не имеют проблемы при загрузке сотни изображений в panoramaItem.

Лучше все еще, если вы можете позволить себе время, сделать профиль памяти и посмотреть, где находится раздувание, иногда это может быть какая-то часть вашего приложения, которое зацикливается на памяти.

Последний из всех, сор сам кэширует изображения автоматически, но не всем нравится это так (я уверен, что вы не)

взглянуть на это: Кэширование

изображения

Это важный вопрос, и MSDN в настоящее время довольно молчал об этом. Если вы когда-нибудь задавались вопросом, почему ваша память изображений не была выпущена после очистки источника и удаления изображения с дерева, вы, скорее всего, видели действие кэширования изображений. Это предназначенная оптимизация производительности, чтобы избежать (вниз) загрузки и декодирования одного и того же изображения снова и снова. Вместо этого мы сохраняем кеш в памяти, который мы можем легко и быстро использовать повторно. Это не должно путать кеш браузера с загруженными файлами.

Несмотря на то, что это хорошая и бесплатная оптимизация производительности, время от времени она может изливать вашу память без необходимости, особенно когда вы просматриваете множество изображений, к которым вы никогда не вернетесь. Их кеш будет использовать память на всю жизнь вашего приложения. Хорошая новость заключается в том, что вы можете удалить кэш, когда вы решили, что вам больше не нужен:

BitmapImage bitmapImage = image.Source as BitmapImage; 
bitmapImage.UriSource = null; 
image.Source = null; 

Быть умным об этом может спасти вас совсем немного использования памяти, которая является ценным ресурсом, на телефонном устройстве , В образце приложения перейдите на страницу «Кэширование» и проверьте использование памяти, когда вы показываете/очищаете изображение. Затем установите флажок и повторите попытку. В примере вы увидите разницу ~ 3 МБ.

Вы можете получить полную статью here

Смежные вопросы