gpt4 book ai didi

c# - 使用 ImageResizer 和内存不足异常调整大图像的大小

转载 作者:行者123 更新时间:2023-11-30 15:32:35 25 4
gpt4 key购买 nike

当我使用 ImageResizer.Net(在 32 位系统上)将图像调整为 9000x9000 正方形时遇到内存不足异常:

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 的内存),最初只有 1200MB 左右可供任何 .NET 进程使用。由于碎片化(不是内存泄漏!),任何事件都会将 1200MB 分成 50-100MB 的小块。由于您需要 800MB block 的内存(因为您正在处理大量图像),所以很快就会停止工作。

要让 .NET 解决内存碎片问题,您需要给它 (a) 时间和 (b) 充足的额外空间。

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

关于c# - 使用 ImageResizer 和内存不足异常调整大图像的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18803730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com