Image.FromFile 为何如此占用内存?
还不够格啊 2004-09-07 11:02:53 有4个JPG文件,每个大约800kB,大小为2288x1712,颜色24位。在 WinForm 中放了4 个 PictureBox,来显示这4个图片:
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个图片的要求又不占用如此多的内存?