У меня есть список изображений с высоким разрешением, полученных с веб-сервера. Мне нужно заполнить их в элементе scatterview поверхности SDK. Для показа изображений я использую Контроль изображения для каждого изображения.
Кодовая логика:
У пользователя есть идентификационные теги, которые размещаются на поверхности таблицы и будут получать список изображений с высоким разрешением, связанных с этим тегом. Выборка изображений выполняется в фоновом режиме, чтобы избежать помех пользовательскому интерфейсу. Код для получения изображений JPEG в фоновом режиме:
public BitmapSource FetchImage(string URLlink)
{
JpegBitmapDecoder decoder = null;
BitmapSource bitmapSource = null;
try
{
decoder = new JpegBitmapDecoder(new Uri(URLlink, UriKind.Absolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
catch (Exception)
{
decoder = new JpegBitmapDecoder(new Uri("pack://application:,,,/Resources/ImageNotFound.jpg", UriKind.RelativeOrAbsolute), BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnDemand);
}
finally
{
bitmapSource = decoder.Frames[0];
bitmapSource.Freeze();
}
return bitmapSource;
}
Изображения загружаются с сервера и отображаются в элементе управления изображением. Однако производительность сильно снижается, и приложение просто зависает при загрузке более 10 изображений. Для изображений с низким разрешением я могу загрузить даже 20-30 изображений без зависания или замедления приложения.
Поскольку я прочитал алгоритм по умолчанию для управления изображениями - Fant, я попытался изменить свойства рендеринга в HighQuality. Приложение по-прежнему зависает, но любое меньшее значение убивает саму идею наличия изображения высокого разрешения для отображения.
RenderOptions.SetBitmapScalingMode(mic.ItemImage, BitmapScalingMode.HighQuality);
Есть ли лучший способ загрузки изображений. Я думал о том, чтобы сначала сохранить изображения на жесткий диск, а затем загрузить их в источник изображения. Будет ли это эффективным для повышения производительности, потому что я думал, что, когда я загружаю изображения непосредственно с URL-адреса, это сохранит их в памяти, которая в конечном итоге заканчивается. За счет сохранения изображений сначала я могу избежать этого, но есть шанс, что .NET фактически делает то же самое, сохраняя сначала во временном файле, а затем загружая.
Я также пытался изменить BitmapCacheOption на все доступные опции, но он ничего не улучшил.