#windows-phone-7 #isolatedstorage
#windows-phone-7 #изолированное хранилище
Вопрос:
Я сохраняю фотографии пользователей в изолированном хранилище и отображаю их в списке. Я использовал следующий код для извлечения изображения из изолированного хранилища
BitmapImage bi = new BitmapImage();
var isoFile = IsolatedStorageFile.GetUserStoreForApplication();
if (isoFile.FileExists(imageFileName))
{
using (var imageStream = isoFile.OpenFile(
imageFileName,
FileMode.Open, FileAccess.Read))
{
//imageSource = PictureDecoder.DecodeJpeg(imageStream);
bi.SetSource(imageStream);
}
}
isoFile.Dispose();
//return imageSource;
return bi;
Всего сохранено 100 изображений.При каждой загрузке изображений потребление памяти продолжает увеличиваться, а затем заканчивается.Есть ли лучший способ доступа к изображениям с меньшим потреблением памяти. Я использовал GC.Collect()
даже в конце загрузки. Это просто не работает.
Есть ли лучший способ построения и чтения изображений из изолированного хранилища?
Я разрешаю своим пользователям сохранять фотографии в изолированном хранилище. Является ли изолированное хранилище лучшим вариантом в моем случае?
Комментарии:
1. Вы хотите, чтобы одновременно отображалось много изображений или только по одному за раз?
2. группа изображений, загружаемых одновременно
3. После загрузки все изображения распаковываются, поэтому их объем памяти довольно велик. Кроме того, вы повторно используете элементы управления изображениями для отображения файлов iam или создаете новые? Не забудьте установить для растровых изображений значение null, чтобы удалить их.
4. У меня есть список. Я привязываю растровое изображение к тегу изображения. <Изображение x: Name=»bmpBackground» Source=»{Binding Photo}» Stretch=»Fill»> </Image> не знаю, куда его поместить..
Ответ №1:
У Стефана Вика есть несколько отличных советов по работе с изображениями, в том числе о том, как избежать чрезмерного потребления памяти, в его блоге наhttp://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx
Вам просто нужно принудительно установить для изображения и внутреннего растрового изображения значение null
, чтобы освободить память, когда вы закончите с изображением.
BitmapImage bitmapImage = image.Source as BitmapImage;
bitmapImage.UriSource = null;
image.Source = null;