我在32位系统上使用ImageResizer.Net调整图像90009000方形的大小时遇到??内存不足的异常:ImageBuilder.Current.Build(imageFileName, outputFileName, settings, true);我能够使用流成功调整大型图像的大小:using ...
我在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调整大图像的大小和内存不足异常
基础教程推荐
- c# – 是否可以了解有关mongodb集合更改的信息? 2023-11-26
- [07]ASP.NET Core 进程外(out-of-process)托管 2023-09-26
- C#中SQL Command的基本用法 2023-01-06
- C#程序中类数量对程序启动的影响详解 2022-12-31
- unity实现手游虚拟摇杆 2023-02-16
- C#利用iTextSharp组件给PDF文档添加图片/文字水印 2023-03-14
- 浅谈C#9.0新特性之参数非空检查简化 2023-02-25
- c# – 如何判断linq to sql对象是新的,修改的还是未更改的? 2023-11-23
- C#中?、?.、??、??=运算符的用法 2023-07-18
- C#实现封面图片生成器的示例代码 2023-06-28