在我的程序中的某個位置,用戶選擇一個位圖用作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);
}
流的長度相同。我不明白如何拋出一個內存不足的例外,而另一個不會。我怎樣才能加載這個位圖?
P.S.我也試着
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執行,當真正發生了什麼事情時,您會由於不配置一次性對象而導致無法處理。 –
你的'this.Panel.BackgroundImage = Image.FromStream(stream);'調用的代碼多久? –
此時它只被調用一次。我想它永遠不會被稱爲超過少數幾次。 – user2320861