圖片預覽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