問題簡介:一張報表上面有動態圖片預覽,預覽之后再進行打印預覽,打印之后關閉畫面。此動作進行多次之后,有些動態圖片預覽不出來或者是預覽出來之后打印預覽沒圖片。
解決過程:
經過代碼調試,到下面這個行代碼時:
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();
}