我正在处理一组400+图像,我需要以不同的方式修改它们。最后,我需要有近1500张图片。假设它们都是512*512px
我想首先应用这个修改,以便获得我的1500张图像,并将所有这些图像保存在一个列表中,以便在我的应用程序中快速访问它(我希望能够在不需要任何加载时间的情况下在图像之间切换)
要应用我的修改,我使用WriteableBitmapEx。
问题是,为了能够修改它,我需要将这个图像渲染到WriteableBitmap中,它给我提供了OutOfMemoryException。
下面是我正在做的一个简化示例:
List<WriteableBitmap> myList = new List<WriteableBitmap>();
foreach (var image in mySetOfImages) // iterating on my set of 400+ images
{
WriteableBitmap source = image.RenderImage().As<WriteableBitmap>();
WriteableBitmap dest1 = BitmapFactory.New(512, 512);
WriteableBitmap dest2 = BitmapFactory.New(512, 512);
[...] // Some lines modifying dest1 and dest2 using source
myList.Add(dest1);
myList.Add(dest2);
}我读了很多关于这个异常的东西。我读到我可以加上
GC.Collect();可能在我的“foreach”中,但我认为这将需要很长时间才能加载。
我读到的东西也让我觉得可能是我做得不对,我应该想出另一种方法来做。这就是我在这里发帖的原因,你们有什么建议吗?
发布于 2016-02-11 13:38:06
基本上,在一个32位的.NET进程上,你不能在内存中存储超过2 2GB的东西。正如所指出的,这不是垃圾收集器(GC)的问题,因为您通过将这些图像存储在List<T>中来强烈引用所有这些图像。垃圾收集器将为您的每个图像分配内存,当它处于“压力下”时,将尝试查找不再引用的对象,然后释放它们。然而,由于您似乎只是添加到列表中,压力只会增加:-(
在我看来,你有两个选择:
https://stackoverflow.com/questions/35330766
复制相似问题