我继承了一个受到超大和未压缩图像困扰的网站,所以我正在自动执行纠正它的任务,除了超过一定大小的文件外,它主要工作。例如,我有一个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%的内存。
我的机器有:
为什么会失败?当我运行ImageJob时,在失败之前没有增加内存使用量(据我所见)。
我正在使用带有DiskCache插件的ImageResizer 3.4.3。
我还应该注意,我可以在Photoshop中打开问题文件,向下调整长度为3000px,保存然后运行相同的ImageJob,然后完成而不会出错。
答案 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倍。