2014-01-10 4 views
0

У меня есть веб-служба, которая возвращает лазурный URL-адрес, я устанавливаю это как источник данных для своего управления изображением в шаблоне элемента списка. Этот список может содержать большое количество элементов (Теперь у него около 30 предметов) .Мои потребление памяти приложения превышает 100 МБ для этой отдельной страницы, загружается около 10 МБ данных.Предотвращение загрузки уже загруженных изображений с телефона azure-windows

Когда пользователь перейдет на другую страницу и вернется на эту страницу с изображениями от azure, моя веб-служба будет вызвана снова, и поэтому все изображения будут загружены снова. Есть ли способ проверить, загружены ли изображения и предотвратить повторную загрузку?

Я не уверен, что происходит под капотом, указывая URL-адрес элемента управления изображением.

Это мой XAML

<Image 
    Stretch="UniformToFill" 
    Grid.Column="1" 
    Grid.Row="0" 
    VerticalAlignment="Top" 
    Source="{Binding image_name}" 
    Height="72" 
    Width="128" > 
</Image> 

ответ

2

BitmapImage может проверить кэш для существовавшего копии. Конечно, если вы не задали опцию игнорировать кеш. Проверьте это documentation page. Кроме того, это может быть проблемой с заголовками в вашем лазурном хранилище, убедитесь, что кэширование разрешено, а ресурс жизни достаточно.

+0

Я не использую bitmapimage здесь .. Я обновил свой код .. Должен ли я создать bitmapimage с этого URL-адреса, а затем назначить его элементу управления изображениями? –

+0

Проверьте [это решение] (http: //stackoverflow.com/questions/17261114/image-source-and-caching) .Если это не поможет, вы должны проверить yo ur http заголовков для параметров кэширования. – crea7or

+0

спасибо, я проверю это .. –

1

Прежде всего - вы не должны загружать все полноразмерные iamges с сервера - 10 МБ - это способ для мобильного приложения. Вы должны пойти с несколькими эскизами, а затем, когда пользователь попросит вас загрузить полную версию.

Если вы в порядке с кэшированием как временным решением, это, вероятно, самый простой способ. Если вы хотите сохранить изображение в телефоне в течение более длительного времени (которое вы также можете контролировать), вам придется реализовать свою собственную логику здесь. Самый простой способ, вероятно, состоял бы в том, чтобы поддерживать словарь всех загруженных изображений и создавать ValueConverter, который будет проверять URL-адрес boud и возвращать локальный, если изображение существует или инициировать загрузку фона, что вызовет событие PropertyChanged для свойства bound, чтобы показать изображение, когда это будет сделано.

2

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

В настоящее время интересны вопросы, что делать, если новые изображения были добавлены на сервере или существующие изображения были обновлены? В этом случае каталог на сервере также необходимо изменить (обновить с новой информацией. Так что в следующий раз, когда приложение WP запустится, он получит новый каталог и проверит все отпечатки, его отпечаток не найден или не найден изменен, приложение WP будет загружать только эти изображения по запросу (я имею в виду, когда пользователь переходит только к этому элементу).

Итак, основная идея состоит в том, чтобы сделать этот каталог XML как профиль версии для всех изображений. Также обратите внимание, что этот файл XML должен быть простым и минимальным в размере HTH.

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