从磁盘加载多个大图像时出现System.OutOfMemoryException

时间:2016-12-30 00:32:15

标签: c# .net image system.drawing

我尝试在列表中加载磁盘中的图像(每个大小为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格式的图像。

1 个答案:

答案 0 :(得分:0)

我不建议使用:

Image.FromFile(path);

它很慢并且会使你的过程膨胀 代替:

var fs = new FileStream(path, FileMode.Open, FileAccess.Read);
var photo = Image.FromStream(fs, true, false);

不要忘记处理; - )

基本上,不是将所有数据一次性存入内存,而是杀死您的应用和所有亲人。您将图像操作为数据流。

修改

在任何一种情况下,我都不建议一次编辑所有图像。 你可能会得到一个OutOfMemoryException。

如果可以同时处理两张图像,一旦完成,请将它们丢弃并移至下一组,直到最终图像完成。