当前位置: 代码迷 >> C# >> C# PicutreBox 读取2MB图片时报 “内存不足”解决办法
  详细解决方案

C# PicutreBox 读取2MB图片时报 “内存不足”解决办法

热度:301   发布时间:2016-05-05 03:50:14.0
C# PicutreBox 读取2MB图片时报 “内存不足”
    开发了一个显示图片的程序,读取的图片大小2MB左右,因为程序需要在一台机器上面,然后几个User通过远程桌面连接到服务器,在服务器上面远程程序,可每次2到3个User打开程序后,就会报:“内存不足”,我调试程序后发现在没有加载图片前,内存使用一切正常,在加载图片后,内存使用竟然一下增加了200MB左右,晕。。。。
    实在是不知道为什么,网上找了下,也没有具体的说法,有人说是因为图片读取到内存后,反映出的200MB才是它真正的大小??可是直接看图片属性也就2MB左右呀,为什么呀?????

    那些朋友,帮忙给解决下呀,或者指个方向也行呀,谢谢啦!!

    pbShow.SizeMode = PictureBoxSizeMode.Zoom;
    pbShow.Image = Image.FromFile(@"F:\SOP\0001.jpg");


------解决思路----------------------
2M左右的图片应该不适合用PictureBox控件来显示的了,唯一的解决方案应该只有通过转换图片的格式的方式来使图片的大小变小来进行显示
------解决思路----------------------
图片在内存中占用的空间和它的高度和宽度有关,也就是像素数目有关,像素越多占用内存越大,
------解决思路----------------------
没什么好的方法,你最好把图片的尺寸缩小后再显示,一般来说如果内存占用有几百M的图片的高度和宽度都太大,你缩小它的高度和宽度,就会少占用内存,

另外,可能显示完一副图片之后,你的窗体关闭或者显示另一张图片之后,你忘了调用 Image的Dispose方法,

if (pbShow.Image!=null) pbShow.Image.Dispose();

pbShow.Image = Image.FromFile(@"F:\SOP\0001.jpg");

同样,如果pbShow控件被销毁或者它所在的窗体被关闭,也要执行一次if (pbShow.Image!=null) pbShow.Image.Dispose();然后再pbShow.Image=null;

------解决思路----------------------
比如说我这里看到这个IE窗口,并不意味这IE窗口里每一个像素都常住在你的内存里。只是意味着(假设我的网卡驱动不是很强劲的话)那么可能我的内存确实瞬间申请那么多,但是你不用担心,因为以后还会重复使用这个200M空间,轻易不会变为400M、1600M.......

内存不是问题。你只要解决bug就好了。不要把精力放在占用的内存大小上。
  相关解决方案