前几天维护的程序发生了内存不足的问题,经查看,是由于用户一次加载了15张图片,每张图片的大小都接近1M,用户把图片修改后,程序可以正常处理了。
不过又想了一下,15张JPG图片的大小 加起来也不过是最大15M而已,也不至于内存不够呀!
于是检查代码:
前几天维护的程序发生了内存不足的问题,经查看,是由于用户一次加载了15张图片,每张图片的大小都接近1M,用户把图片修改后,程序可以正常处理了。不过又想了一下,15张JPG图片的大小 加起来也不过是最大15M而已,也不至于内存不够呀!于是检查代码: FileStream fs = new FileStream(txtImageName.Text, FileMode.Open); BinaryReader br = new BinaryReader(fs);
如果通过 Bitmap
Image
类不断的打开图片文件(在窗口中加载很多图片,尤其是大体积图片的话),会使 WPF 程序的
内存
占用
持续走高,直到
内存
耗尽报出异常。
通过
内存
跟踪查看,
占用
过多的都是 Unmanaged 部分,并不是 .net
对象
。
暂时还没有探索到具体原因,目前看到一个比较有效的方法就是在加载图片完成后
调用 Bitmap
Image
对象
的 Freeze 方法,虽然一开始
内存
仍然会持续走高
但是在
内存
即将耗尽或下次
内存
回收时,会根据情况释放之前
占用
的过多
内存
,不会一直持续走高直到耗
public static System.Windows.Media.Imaging.Bitmap
Image
GetBitmap
Image
(string fileName)
if (File.Exists(fileName) == false) return
null
;
File
Stream
file
Stream
= new File
Stream
(fileName, FileMode.Open, FileAccess.Read);
var
image
=
Image
.FromS
在C#中使用
Image
.FromFile(string path)方法经常会报
内存
不足的错误,需要在使用后及时进行资源释放才能有效缓解该部分
内存
问题
。
System.Drawing.
Image
img = System.Drawing.
Image
.FromFile(path);
......
......
img.Dispose();
希望可以帮到大家^_^
原因:使用
Image
.FromFile方法,这个方法会锁定图片文件,而且会导致
内存
占用
增大,不建议使用,一下是两种解决方法:
一:将
Image
类转换成Bitmap类
1 System.Drawing.
Image
img = System.Drawing.
Image
.FromFile(filepath);
2 System.Drawing.
Image
bmp = new System.Drawing...
我再用
Image
.From
Stream
转成
Image
时因为数据过大,导致报错:
内存
不足。然后网上搜了很多方法也没什么用。先看我以前的代码吧//解析json串
JObject JsonTrackData = (JObject)JsonConvert.DeserializeObject(TrackData);
//获取
image
Info
最近在做一个上传图片的功能,但是清晰度不能太低,图片也不能太大,但是计算这块儿就出现了难题。
OSS对尺寸大小有限制,不能超过4096。
我们从相册选择好图片,先判断大小,查了很多资料发现是不对的,计算出来跟在mac或者手机里是不一样的,偏很大,比如这种方法:
image
.size.width *
image
.size*height * 4 / 1024 /1024 = 0.5M
我计算出来比实际...