繁体   English   中英

大图像上的ImageResizer内存不足异常

[英]ImageResizer Out of Memory Exception on large image

我继承了一个站点,该站点充满了过大且未压缩的图像,因此我正在自动执行纠正该任务的任务,除了一定大小的文件以外,该任务通常可以正常工作。 例如,我有一个8176x6132 300dpi和24位深度的JPG图像,文件大小为4.49mb。

这是我的ImageJob

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

我的机器上有大量可用资源,但内存不足却无法使用。 当我现在测试时,我有90%的CPU空闲和51%的内存。

我的机器有:

  • 英特尔®酷睿TMi7四核处理器i7-4790(3.6GHz)8MB缓存
  • 16GB金士顿DUAL-DDR3 1600MHz

为什么这会失败? 当我运行ImageJob时,在内存出现故障之前(据我所知)并没有增加内存的使用。

我正在将ImageResizer 3.4.3与DiskCache插件一起使用。

我还要注意,我可以在Photoshop中打开问题文件,将其长边调整为3000px,保存然后运行相同的ImageJob,然后完成该操作而不会出现错误。

诊断页面输出和异常堆栈跟踪

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

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

第三,升级到v4并使用FastScaling插件。 您将获得实际的并发性 ,并且将在较小的时间内保留较大的RAM块,这意味着您可以很轻松地将如此大的文件的吞吐量提高10倍。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM