Мой ответ будет общим - аналогично вашему вопросу. Я предполагаю, что вы точно знаете, что проблема в образах. (Поскольку простой ListBox с несколькими сотнями текстовых элементов может стоить вам много МБ.)
При поиске в Интернете вы найдете множество ссылок, таких как this one. Но общий анализ легко сделать.
Возьмите изображение размера экрана WP7, то есть 480x800. 32-битное растровое изображение (я полагаю, это то, что использует WP7 при открытии изображения) занимает примерно 1,5 МБ (простое умножение).
Тот же файл jpg может иметь размер меньше 10x (для сжатия высокого качества) или даже меньше.
Теперь, что делается за кулисами, когда вы используете конструкцию
<image source="http://..."/>.
(В случае отсутствия какой-либо информации от вас, это то, что я полагаю, вы используете.)
WP7 загружает изображение и добавляет его в кеш. Кэш, по-видимому, отслеживает использование Ури, указывающего на изображение.
Как показано ниже, изображение открывается, то есть преобразуется в растровое изображение собственного размера изображения. В этом процессе изображение получает уменьшенную дискретизацию, если оно превысит максимум. Размер текстуры WP7.
Вы можете настроить размер растрового изображения, как описано here. Если вы заботитесь о качестве, то вам следует использовать коэффициент масштабирования 2, 4 или 8. В случае jpeg эти факторы представляют собой самый быстрый вариант. (Ну, я понятия не имею, знаете ли вы разрешение изображения до того, как изображение загрузится в элемент управления Image. Это не так сложно получить эту информацию из файла jpg, но прямо сейчас я понятия не имею, как это можно легко сделать на WP7.)
Растровое изображение освобождается, если (моя спекуляция), если источник элемента управления имеет значение null. Загруженное изображение очищается из кеша, когда Uri установлен в null. (Это сообщается в Интернете много раз.)
Если вы берете всю эту информацию, должно быть возможно (вид) контролировать использование кеша изображения. Вы можете грубо оценить размер изображения и можете решить, какие изображения остаются в кеше. Возможно, потребуются некоторые трюки, такие как хранение объектов Uri в ваших собственных структурах и их освобождение по мере необходимости. Я не говорю, что это легко сделать, но это, безусловно, возможно.
Показать код. –
Это все приложение - ничего особенного. Меня просто интересовало, есть ли у кого-то стратегия для работы с большим объемом памяти –
Для совершенно произвольных проблем? Мое решение обычно заключается в том, чтобы исправить кровавые проблемы в коде. –