Silverlight: BitmapImage из потока выдает исключение (катастрофический сбой (исключение из HRESULT: 0x8000FFFF (E_UNEXPECTED)))

Мне нужно динамически загружать множество (иногда сотни) миниатюрных изображений. По соображениям производительности мне нужно делать это в ограниченном количестве запросов, я использую один запрос / ответ для тестирования. Я отправляю двоичные данные для изображений в ответе и загружаю их в 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 () в цикл, в котором я загружаю эскизы изображений, позволяет мне загрузить еще несколько изображений, поэтому я думаю, что это как-то связано с управлением памятью, но я не знаю, что я могу сделать, чтобы решить эту проблему.

7
задан toby 8 July 2011 в 16:01
поделиться