我尝试在列表中加载磁盘中的图像(每个大小为30到50 MB),如下所示
var images = new List<Image>();
foreach (var imgPath in paths)
{
var img = Image.FromFile(imgPath);
images.Add(img);
}
问题是在第一张或第二张图片后我得到了
System.OutOfMemoryException
...我的猜测是图像太大了。我知道一个好的做法是逐个处理图像,但我不能,因为我需要将它们全部合并为一个(如拼贴),我不能使用缩略图因为我需要尊重原始尺寸。
我尝试将maxRequestLength
更改为"10000000"
,但这没用。
由于我无法进入图像处理步骤,因此我不认为我有处置对象的问题,至少现在还没有。
有没有办法增加可用的内存,或类似的东西?
P.S。我使用JPG格式的图像。
答案 0 :(得分:0)
我不建议使用:
Image.FromFile(path);
它很慢并且会使你的过程膨胀 代替:
var fs = new FileStream(path, FileMode.Open, FileAccess.Read);
var photo = Image.FromStream(fs, true, false);
不要忘记处理; - )
基本上,不是将所有数据一次性存入内存,而是杀死您的应用和所有亲人。您将图像操作为数据流。
修改强>
在任何一种情况下,我都不建议一次编辑所有图像。 你可能会得到一个OutOfMemoryException。
如果可以同时处理两张图像,一旦完成,请将它们丢弃并移至下一组,直到最终图像完成。