我在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#端口扫描器的编写方法 2023-06-27
- C#泛型类型知识讲解 2023-02-17
- C#使用SharpZipLib压缩解压文件 2023-06-05
- .net中常用的正则表达式 2023-06-04
- c# Selenium爬取数据时防止webdriver封爬虫的方法 2023-03-29
- asp.net实现遍历Request的信息操作示例 2023-02-09
- C#实现插入排序 2023-06-28
- c#将字节数组转成易读的字符串的实现 2023-02-07
- c# – Windows应用商店,加密,提供的用户缓冲区对请求的操作无效 2023-09-20
- C#对Xamarin框架进行数据绑定 2023-05-16