private void button3_Click(object sender, System.EventArgs e)
{
Image oImage;
oImage = Image.FromFile( @"J:\z\1\1.jpg" );
this.pictureBox1.Image = oImage;
oImage = Image.FromFile( @"J:\z\1\2.jpg" );
this.pictureBox2.Image = oImage;
oImage = Image.FromFile( @"J:\z\1\3.jpg" );
this.pictureBox3.Image = oImage;
oImage = Image.FromFile( @"J:\z\1\4.jpg" );
this.pictureBox4.Image = oImage;
}
发现每次执行 oImage = Image.FromFile(...) 后,内存占用(物理内存与虚拟内存之和)平均增长约23MB,执行完此次Button 的点击操作,内存占用从22MB上升到117MB.
如果执行:
private void button2_Click(object sender, System.EventArgs e)
{
this.pictureBox4.Image.Dispose();
this.pictureBox4.Image = null;
this.pictureBox3.Image.Dispose();
this.pictureBox3.Image = null;
this.pictureBox2.Image.Dispose();
this.pictureBox2.Image = null;
this.pictureBox1.Image.Dispose();
this.pictureBox1.Image = null;
}
则可以释放占用的内存,每次释放约23MB,整体从117MB释放到22MB.
如果图片在内存中以 BMP 方式存放,大小应为 2288x1712x3(24bits)=12MB,即使以32位颜色存放应为16MB. 那 oImage = Image.FromFile(...) 占用的另外一部分内存做什么用了?
有没用其他方法满足我同时显示4个图片的要求又不占用如此多的内存?
10 个解决方案
#1
因为打开的是位图数据。
#2
up
#3
猜测:
jpg是压缩格式的位图,它本身不是真正的原始位图,进入内存后,要经过一定的算法的才能成为原始位图,也就是说,内存中的才是真正原始位图的大小,这时,它是未压缩的,并以纯二进制表示的,所以占用内存超出文件的大小。
你可以再找一个bmp的试试,如果以上猜测正确,bmp读入内存后,与原始文件大小区别不大。
jpg是压缩格式的位图,它本身不是真正的原始位图,进入内存后,要经过一定的算法的才能成为原始位图,也就是说,内存中的才是真正原始位图的大小,这时,它是未压缩的,并以纯二进制表示的,所以占用内存超出文件的大小。
你可以再找一个bmp的试试,如果以上猜测正确,bmp读入内存后,与原始文件大小区别不大。
#4
应该没有什么好的方法。我从前做过一个类似的简单图像处理软件,带批处理,内存消耗的确比较大,但也在可以忍受的范围内。
#5
如果太占用内存,就不用了,可以使用ImageList
#6
啊,没看清你写的东西,不好意思,说了废话..................
#7
GDI+的问题........
#8
图片存为24位BMP文件,大小为12M. 用 oImage = Image.FromFile(...) 后内存占用增加35M.
#9
mark
#10
用gif呢
#1
因为打开的是位图数据。
#2
up
#3
猜测:
jpg是压缩格式的位图,它本身不是真正的原始位图,进入内存后,要经过一定的算法的才能成为原始位图,也就是说,内存中的才是真正原始位图的大小,这时,它是未压缩的,并以纯二进制表示的,所以占用内存超出文件的大小。
你可以再找一个bmp的试试,如果以上猜测正确,bmp读入内存后,与原始文件大小区别不大。
jpg是压缩格式的位图,它本身不是真正的原始位图,进入内存后,要经过一定的算法的才能成为原始位图,也就是说,内存中的才是真正原始位图的大小,这时,它是未压缩的,并以纯二进制表示的,所以占用内存超出文件的大小。
你可以再找一个bmp的试试,如果以上猜测正确,bmp读入内存后,与原始文件大小区别不大。
#4
应该没有什么好的方法。我从前做过一个类似的简单图像处理软件,带批处理,内存消耗的确比较大,但也在可以忍受的范围内。
#5
如果太占用内存,就不用了,可以使用ImageList
#6
啊,没看清你写的东西,不好意思,说了废话..................
#7
GDI+的问题........
#8
图片存为24位BMP文件,大小为12M. 用 oImage = Image.FromFile(...) 后内存占用增加35M.
#9
mark
#10
用gif呢