C# Image.from文件内存不足
我在Windows7上写了一个程序,从文件夹中的图像中读取二维码,效果很好,但现在我在Windows10上尝试,结果崩溃了。 我正在使用Image.FromFile读取文件。第一次似乎工作正常,但第二次抛出内存不足异常 代码如下:C# Image.from文件内存不足,c#,image,file,windows-7,windows-10,C#,Image,File,Windows 7,Windows 10,我在Windows7上写了一个程序,从文件夹中的图像中读取二维码,效果很好,但现在我在Windows10上尝试,结果崩溃了。 我正在使用Image.FromFile读取文件。第一次似乎工作正常,但第二次抛出内存不足异常 代码如下: private void watcher_FileCreated(object sender, FileSystemEventArgs e) { string strFileExt = Path.GetExtension(e.FullPath)
private void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
string strFileExt = Path.GetExtension(e.FullPath);
if (Regex.IsMatch(strFileExt, @"\.jpg|\.png", RegexOptions.IgnoreCase))
{
try
{
using (var b = (Bitmap)Image.FromFile(e.FullPath))
{
var result = reader.Decode(b);
if (result != null)
{
if (result.ResultPoints[0].X < result.ResultPoints[2].X)
{
if (result.ResultPoints[0].Y < result.ResultPoints[2].Y)
{
b.RotateFlip(System.Drawing.RotateFlipType.Rotate270FlipNone);
}
}
else
{
if (result.ResultPoints[0].Y < result.ResultPoints[2].Y)
{
b.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
}
else
{
b.RotateFlip(System.Drawing.RotateFlipType.Rotate90FlipNone);
}
}
string fileName = result.Text + DateTime.Now.ToString("yyyyMMdd-HHmmss") + Path.GetExtension(e.FullPath);
b.Save(Path.Combine(ConfigurationManager.AppSettings["destinationFolder"], fileName));
client.SendData(result.Text + "|" + fileName, "qrListener");
Console.WriteLine("QR: " + result.Text + " File: " + fileName);
}
}
File.Delete(e.FullPath);
}
catch (Exception ex){
Console.WriteLine(ex.Message);
}
}
}
我已经把电脑里的所有东西都拿走了,但还是死机了
如果文件没有有效的图像格式,或者GDI+不支持文件的像素格式,此方法将抛出OutOfMemoryException异常
我认为您尝试加载的图像不再受支持。你能上传一张示例图片来帮助我们重现图像吗
也许图像的内部结构混淆了GDI+编码器。尝试使用图像编辑器打开有故障的图像,然后再次保存。现在尝试使用代码加载新图像 出于某种原因,当文件已解锁时,观察者第一次触发,但下一次文件仍在写入中,不完整,这使得OOM异常作为 如果文件没有有效的图像格式,或者GDI+不支持文件的像素格式,此方法将抛出OutOfMemoryException异常 我添加了一种方法,每100毫秒检查一次文件是否解锁
我刚刚注意到的另一件事是,当我复制文件而不是移动文件时,它会引发异常。是否尝试将位图写入读取位图的同一文件?这本不该奏效的!使用一条小溪!我什么时候写这个图像?你是说轮换还是保存?不管怎样,我删除了using中的所有代码,仍然抛出了异常。嗯,这只是一个图像还是更多的图像?你能告诉我们更多关于他们的情况吗?这是其中一张图片。它发生在jpg和png上。好的,图像是无辜的。以下是我所怀疑的,但由于时间不够,无法测试:Filewatcher每秒启动一次以上,因此文件名并不总是不同的,因此出现了覆盖正在使用的文件的旧问题。可能是这样吗?搜索关于覆盖文件的帖子,你会看到很多例子。一种方法是用流进行IO。你能上传一个导致OOM异常的图像供我们测试吗。