图片预览System.Drawing.Image.FromStream(ms, true); 报错-内存不足


问题简介:一张报表上面有动态图片预览,预览之后再进行打印预览,打印之后关闭画面。此动作进行多次之后,有些动态图片预览不出来或者是预览出来之后打印预览没图片。

 

解决过程:

经过代码调试,到下面这个行代码时:

System.Drawing.Image.FromStream(ms, true);  报错为内存不足

然后打开任务管理器 重复问题的动作来监控进程所占内存,经过基本测试 内存占用到1G左右的时候会出现问题。

然后就去搜索有关System.Drawing.Image.FromStream(ms, true); 内存不足的解决方案,经过搜索代码改为如下:

MemoryStream ms = new MemoryStream(bytes);
image = System.Drawing.Image.FromStream(ms, true);

//下面3行为添加代码

ms.Close();
ms.Dispose();  //释放占用资源
System.GC.Collect();//垃圾回收

 

 

打印预览画面添加如下代码

void _btnCancel_Click(object sender, EventArgs e)
{
if (_preview.IsRendering)
{
_preview.Cancel();
_preview.Dispose();
}
else
{
this.Dispose();
Close();
}
}

 

private void CoolPrintPreviewDialog_FormClosed(object sender, FormClosedEventArgs e)
{
this.Dispose();
System.GC.Collect();
}

 

 

添加之后再进行重复打印,打印预览时为440MB,关闭打印预览画面 内存占用基本稳定在260MB左右,问题基本解决。

搜索参考:

垃圾回收:

http://www.cnblogs.com/zuozuo/archive/2011/09/22/2185239.html

http://www.blue1000.com/bkhtml/c17/2012-11/70982.htm

 

 

图片内存:

http://bbs.csdn.net/topics/390932070

public bool SetPic(byte[] filebytes)
{
MemoryStream ms = new MemoryStream(filebytes);
Image img = Image.FromStream(ms);

ms.Close();
ms.Dispose();
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM