Мне нужно динамически загружать множество (иногда сотни) миниатюрных изображений. По соображениям производительности мне нужно делать это в ограниченном количестве запросов, я использую один запрос / ответ для тестирования. Я отправляю двоичные данные для изображений в ответе и загружаю их в BitmapImage с помощью MemoryStream. Это работает правильно, пока я не загружу более 80 эскизов, затем я получу исключение Catastrophic Failure. Чтобы убедиться, что мои данные не были повреждены, я несколько раз пытался загрузить BitmapImage с одним и тем же массивом байтов, и он вылетал после 80 или около того загрузок.
Вот пример того, как изображение загружается из байтового массива, байтовый массив, как известно, имеет допустимые данные изображения (png):
private BitmapImage LoadImage(byte[] imageData)
{
BitmapImage img = new BitmapImage();
MemoryStream stream = new MemoryStream(imageData);
img.SetSource(stream); // Exception thrown here after too many images loaded.
return img;
}
Затем я использую BitmapImage в качестве источника для элемента изображения на странице, но ошибка возникает в строке img.SetSource(...) выше.
Добавление GC.Collect() в цикл, в котором я загружаю миниатюрные изображения, позволяет мне загрузить еще несколько изображений, поэтому я думаю, что это как-то связано с управлением памятью, но я не знаю, что я могу сделать, чтобы исправить проблему.
img.SetSource? Вы уверены, что загружаемые png-файлы имеют размер эскиза или вы загружаете изображения большего размера, которые масштабируются с помощью элемента управления изображением? Это миниатюры фотографий? - person AnthonyWJones   schedule 08.07.2011img.SetSource(отсюда и массив байтов). Изображения полноразмерные, поскольку я кэширую их для основного кадра просмотра, но это отсканированные документы, и они не очень большие (в большинстве случаев файлы размером от 100 до 200 КБ). Я бы ожидал какой-то ошибки нехватки памяти, если проблема связана с слишком большим объемом данных. - person toby   schedule 08.07.2011