我需要动态加载许多(有时数百个)缩略图。出于性能原因,我需要在有限的请求数量内完成此操作,目前为测试,我正在使用单个请求/响应。我在响应中发送图像的二进制数据,并使用MemoryStream将其加载到BitmapImage中。这样做可以正常工作,直到我加载了超过80个缩略图,然后我会收到“灾难性故障”异常。为确保我的数据没有损坏,我尝试使用相同的字节数组多次加载BitmapImage,但是在加载了80次左右后它会崩溃。
以下是从字节数组中加载图像的示例,已知该字节数组具有有效的图像数据(png):
以下是从字节数组中加载图像的示例,已知该字节数组具有有效的图像数据(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()
可以让我加载更多的图像,所以我认为这与内存管理有关,但我不知道该怎么解决这个问题。
img.SetSource
吗?你确定下载的PNG文件是“缩略图”大小,还是正在下载被图像控件缩放的更大的图像?这些缩略图是照片的缩略图吗? - AnthonyWJonesimg.SetSource
(因此使用字节数组)。这些图像是全尺寸的,因为我正在为主视图框架缓存它们,但它们是扫描文档,大小不是很大(大多数文件大小在100kb到200kb之间)。如果问题是数据量太大,我会预期出现某种内存不足错误。 - toby