我想爲文件夾中的每個圖像創建一個200px高度和寬度的拇指。這應該被起訴的圖像大小各不相同,沒有寬或高於1200像素C#OutOfMemoryException Image.Save
List<string>ls=System.IO.Directory.GetFiles("C:\\sampleDir\\").ToList();
foreach(string c in ls)
{
var fu=new Bitmap(Image.FromFile(c), new Size(200, 200));
fu.Save("\\thumbs\\"+c);
//delete image from memory.
fu.Dispose();
}
反覆幾次後,它崩潰@fu.Save(...)
與OutOfMemoryException
,除了說Error in GDI+
。
在我第一次得到這個異常之後,我加了fu.Dispose();
。 最大的問題是,它爲什麼不起作用。
注意通過將GC.Collect();
添加到我的循環它的工作,但它似乎不是正確的解決方案。
這工作對我來說是 - 感謝@Daniel Hilgarth解決方案:
List<string>ls=System.IO.Directory.GetFiles("C:\\sampleDir\\").ToList();
foreach(string c in ls)
{
var fu1=Image.FromFile(c);
var fu=new Bitmap(fu1, new Size(200, 200));
fu.Save("\\thumbs\\"+c);
//delete image from memory.
fu.Dispose();
fu1.Dispose();
}
拇指良好的規則 - 如果你使用任何實現'IDisposible',包起來的'使用{} '。 – jdphenix
值得注意的是.Net綁定到GDI +是放棄分析根本原因而臭名昭着的,而是聲稱「我已經消除了一半錯誤的可能原因,其他所有我會報告爲內存不足的東西」。如果給出的答案沒有幫助,則需要深入挖掘並在.Net放棄之前找到實際的原始錯誤代碼。 –