为什么我得到一个内存不足的错误?谢谢
if (File.Exists(photoURI))
{
FileStream fs = new FileStream(photoURI, FileMode.Open, FileAccess.Read);
Image img = Image.FromStream(fs);
fs.Close();
}发布于 2010-10-03 09:24:54
在Image.FromFile文档中,如果满足以下条件,则可以抛出OutOfMemoryException:
该文件没有有效的图像格式。
-或者-
GDI+不支持文件的像素格式。
检查您的图像格式。
此外,如果要在加载图像后立即关闭流,则必须制作图像的副本。看看here吧。GDI+必须在映像的生命周期内保持流的打开状态。
发布于 2010-10-03 09:23:51
的第一个错误:
if (File.Exists())文件系统是易失性的,因此对文件的访问可能会在带有if条件的行和后面的行之间更改。不仅如此,File.Exists()可能会返回true,但是如果您对文件缺乏安全权限或者文件已经被锁定,那么FileStream仍然可能抛出异常。
相反,处理此问题的正确方法是使用try/catch块。相反,将您的开发时间花在异常处理程序上,因为无论如何您都必须编写该代码。
的第二个错误:
fs.Close();这一行必须在finally块中,否则可能会留下打开的文件句柄。我通常建议使用using块来确保此类资源得到正确处理,但由于您已经需要try/catch,因此可以使用如下代码:
Image img = null;
FileStream fs = null;
try
{
fs = new FileStream(photoURI, FileMode.Open, FileAccess.Read);
img = Image.FromStream(fs);
}
finally
{
fs.Close();
}发布于 2011-08-05 18:09:50
我遇到了同样的问题,图像或位图的内存不足异常,我尝试调整大小,将其绘制在面板和图片框上,等等。我有可用的内存,所以在我的例子中例外的是一些转移注意力的问题。
在踢了几个小时的PC之后,我发现是一个第三方DLL没有关闭流。一些'writeline‘调试可能对检查你是否真的有可用的内存很有用:
proc = Process.GetCurrentProcess();
Console.WriteLine("Memory Usage" + proc.PrivateMemorySize64);https://stackoverflow.com/questions/3848132
复制相似问题