【发布时间】:2014-03-28 09:37:41
【问题描述】:
在我的程序中,用户选择了一个位图作为 Panel 对象的背景图像。当用户这样做时,程序会立即用背景图像绘制面板,一切正常。当用户单击“保存”时,以下代码将位图保存到 DataTable 对象中。
MyDataSet.MyDataTableRow myDataRow = MyDataSet.MyDataTableRow.NewMyDataTableRow(); //has a byte[] column named BackgroundImageByteArray
using (MemoryStream stream = new MemoryStream())
{
this.Panel.BackgroundImage.Save(stream, ImageFormat.Bmp);
myDataRow.BackgroundImageByteArray = stream.ToArray();
}
一切正常,这个流没有内存不足异常,即使它包含所有图像字节。但是,当应用程序启动并加载保存的数据时,以下代码会抛出内存不足异常:
using (MemoryStream stream = new MemoryStream(myDataRow.BackGroundImageByteArray))
{
this.Panel.BackgroundImage = Image.FromStream(stream);
}
流的长度相同。我不明白一个人如何抛出内存不足异常而另一个没有。如何加载此位图?
附:我也试过了
using (MemoryStream stream = new MemoryStream(myDataRow.BackgroundImageByteArray.Length))
{
stream.Write(myDataRow.BackgroundImageByteArray, 0, myDataRow.BackgroundImageByteArray.Length); //throw OoM exception here.
}
【问题讨论】:
-
通常 GDI+(
Image的构建基础)会通过 Out Of Memory 执行,而实际上发生的情况是您因未处理一次性对象而导致 Out Of Handles。 -
您的
this.Panel.BackgroundImage = Image.FromStream(stream);代码多久调用一次? -
此时它只被调用一次。我想它只会被调用几次。
标签: c# image bitmap out-of-memory memorystream