首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存不足Image.FromFile

内存不足Image.FromFile
EN

Stack Overflow用户
提问于 2010-10-03 09:05:05
回答 7查看 52.5K关注 0票数 20

为什么我得到一个内存不足的错误?谢谢

代码语言:javascript
复制
if (File.Exists(photoURI))
{
    FileStream fs = new FileStream(photoURI, FileMode.Open, FileAccess.Read);
    Image img = Image.FromStream(fs);
    fs.Close();
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-10-03 09:24:54

Image.FromFile文档中,如果满足以下条件,则可以抛出OutOfMemoryException

该文件没有有效的图像格式。

-或者-

GDI+不支持文件的像素格式。

检查您的图像格式。

此外,如果要在加载图像后立即关闭流,则必须制作图像的副本。看看here吧。GDI+必须在映像的生命周期内保持流的打开状态。

票数 32
EN

Stack Overflow用户

发布于 2010-10-03 09:23:51

的第一个错误:

代码语言:javascript
复制
if (File.Exists())

文件系统是易失性的,因此对文件的访问可能会在带有if条件的行和后面的行之间更改。不仅如此,File.Exists()可能会返回true,但是如果您对文件缺乏安全权限或者文件已经被锁定,那么FileStream仍然可能抛出异常。

相反,处理此问题的正确方法是使用try/catch块。相反,将您的开发时间花在异常处理程序上,因为无论如何您都必须编写该代码。

的第二个错误:

代码语言:javascript
复制
fs.Close();

这一行必须在finally块中,否则可能会留下打开的文件句柄。我通常建议使用using块来确保此类资源得到正确处理,但由于您已经需要try/catch,因此可以使用如下代码:

代码语言:javascript
复制
Image img = null;
FileStream fs = null;
try
{
    fs = new FileStream(photoURI, FileMode.Open, FileAccess.Read);    
    img = Image.FromStream(fs);    
}
finally
{
    fs.Close();
}
票数 7
EN

Stack Overflow用户

发布于 2011-08-05 18:09:50

我遇到了同样的问题,图像或位图的内存不足异常,我尝试调整大小,将其绘制在面板和图片框上,等等。我有可用的内存,所以在我的例子中例外的是一些转移注意力的问题。

在踢了几个小时的PC之后,我发现是一个第三方DLL没有关闭流。一些'writeline‘调试可能对检查你是否真的有可用的内存很有用:

代码语言:javascript
复制
proc = Process.GetCurrentProcess();
Console.WriteLine("Memory Usage" + proc.PrivateMemorySize64);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3848132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档