【发布时间】:2016-09-16 15:23:47
【问题描述】:
当我在用 C# 编码的图像查看器中添加下一个和上一个导航选项时,当我按 Next 大约 20 次左右时,Visual Studio 告诉我进程内存不足。它在任何有很多文件夹的文件夹中执行此操作,即使它们的图像文件大小都很小
我明白了:
System.Drawing.dll 中发生“System.OutOfMemoryException”类型的未处理异常附加信息:内存不足。
这是我正在使用的代码
private void next_Click(object sender, EventArgs e)
{
string[] foldernm = Directory.GetFiles(Path.GetDirectoryName(lfoto_file.FileName));
_pictureIndex++;
if (_pictureIndex >= foldernm.Length)
{
_pictureIndex = 0;
}
ibread_img.Image.Dispose();
ibread_img.Image = Image.FromFile(foldernm[_pictureIndex]);
}
现在你可以看到,我在那里有ibread_img.Image.Dispose();,因为我已经搜索过这个和其他人说要使用那个,但它不起作用,我仍然遇到同样的问题,断点确认代码正在运行,所以我很困惑为什么它仍然内存不足。我正在循环的图像并不大。我已经尝试了所有可以找到的方法,包括将之前加载的图像归零,手动调用垃圾收集器,但似乎没有任何效果。我在 C# 方面不是最擅长的,因此该代码中可能存在可怕的错误或缺陷,但我不知道,关于如何解决此问题的任何想法?
【问题讨论】:
-
你确定你确实有有效的图像文件吗?
-
异常抛出后图片还在绘制吗?如果是这样,这可能与以下内容重复:stackoverflow.com/questions/6506089/…
-
由于您没有指定搜索模式/过滤器,您可能会尝试加载非图像文件。
-
问题是它不检查下一个文件是否像LarsTech和Plutonix所说的那样,我犯了一个如此愚蠢的错误,我完全忘记并忽略了它,非常感谢很多
-
GDI 有一个坏习惯,就是对各种问题抛出
OutOfMemoryException,其中很多根本与内存不足无关。我发现这通常意味着图像文件已损坏,或者是 GDI 无法读取的格式。
标签: c# .net winforms picturebox