ImageResizer大图像上的内存不足

时间:2015-10-26 10:32:01

标签: c# .net image-resizing imageresizer

我继承了一个受到超大和未压缩图像困扰的网站,所以我正在自动执行纠正它的任务,除了超过一定大小的文件外,它主要工作。例如,我有一个JPG图像,它是8176x6132 300dpi和24位深度,文件大小是4.49mb。

这是我的ImageJob

var instructions = new Instructions("width=1920;height=0;mode=max");
var resizedImg = new ImageJob(filePath, filePath, instructions).Build();

我的计算机上有足够的可用资源但内存异常。正如我现在测试的那样,我有90%的CPU空闲和51%的内存。

我的机器有:

  • 英特尔®酷睿™1M四核处理器i7-4790(3.6GHz)8MB缓存
  • 16GB KINGSTON DUAL-DDR3 1600MHz

为什么会失败?当我运行ImageJob时,在失败之前没有增加内存使用量(据我所见)。

我正在使用带有DiskCache插件的ImageResizer 3.4.3。

我还应该注意,我可以在Photoshop中打开问题文件,向下调整长度为3000px,保存然后运行相同的ImageJob,然后完成而不会出错。

Diagnostics page output and exception stack trace

1 个答案:

答案 0 :(得分:1)

首先,以64位模式而不是32来运行该过程。这样可以更好地定位所需的150mb,62mb和12mb的连续内存块。如果您触发回退代码路径,或者图像是CMYK jpeg(常见)或有问题,则可能需要另外200mb。

其次,由于您未使用URL API,请确保您已限制要处理的并发图像数。在ImageResizer v3中,一次执行1或2。

第三,升级到v4并使用FastScaling插件。 You'll get actual concurrency,大量的RAM将保留较短的时间,这意味着您的吞吐量很容易在这么大的文件上增加10倍。