System.Drawing.Image.FromStream OutOfMemory异常

时间:2015-02-23 23:37:57

标签: c# asp.net memory-management out-of-memory

第一行失败,System.OutOfMemoryException号召唤Image.FromStream

using (System.Drawing.Image i = System.Drawing.Image.FromStream(new System.IO.MemoryStream(ucDocument1.UploadedFiles[0].FileBytes))) {
//additional code here
}

字节数组来自DevExpress.Web.ASPxUploadControl.ASPxUploadControl对象,并且将失败案例字节数组写入数据库并从数据库成功重读的测试证明字节数组有效。对于各种大小的PNG和JPG文件,操作成功,对于特定的已知非损坏的PNG / JPG文件,即使是那些尺寸小于成功案例的文件也是如此。文件失败会反复出现System.OutOfMemoryException异常。怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

假设您没有泄漏任何东西,似乎有一些病态的情况下GC无法正常工作。例如,如果您使用AsParallel运行Image.FromStream作为并行查询的一部分,我们在一些机器配置中发现我们可能会耗尽内存。

pstrjds建议的解决方案为我们工作,

  try
  {
      return (Bitmap)Image.FromStream(stream);
  }
  catch (OutOfMemoryException)
  {
      // retry only once. If it keeps failing it may be something more serious
      GC.Collect();
      GC.WaitForFullGCComplete();
      GC.WaitForPendingFinalizers();
      GC.Collect();
      return (Bitmap)Image.FromStream(stream);
  }

希望有所帮助。