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