我在32位系统上使用ImageResizer.Net调整图像9000×9000方形的大小时遇到​​内存不足的异常:

ImageBuilder.Current.Build(imageFileName, outputFileName, settings, true);

我能够使用流成功调整大型图像的大小:

using (var stream = new FileStream(imageFileName, FileMode.Open, FileAccess.Read))
using (var img = Image.FromStream(stream, true, false))
{
    ImageBuilder.Current.Build(img, outputFileName, settings);
    stream.Close();
}

但是,最后一个方法在x循环后仍然会遇到内存不足异常. ImageResizer中是否存在大量内存泄漏,或者我的代码中存在错误?

无论哪种方式,都有解决方法吗?


解决方法:

如果要处理81兆像素的图像,则需要64位系统.仅解压缩映像将需要350至800个连续兆字节的RAM.

在32位系统(甚至安装了16GB的ram)上,最初只有1200MB左右的内存可用于任何.NET进程.由于碎片(不是内存泄漏!),任何活动都会将1200MB的内存分成50-100MB的小块.由于您需要800MB的内存块(因为您正在处理海量图像),因此这将很快停止工作.

为了允许.NET消除内存碎片,您需要给它(a)时间和(b)足够的额外空间.

在64位系统上,该进程应能够访问.NET运行时足够的RAM,以免在这些工作负载下挨饿.

标签: c, imageresizer

相关文章推荐

添加新评论,含*的栏目为必填