以PNG格式保存图像时出现GDI +异常

Mis*_*sky 12 c# iis asp.net-mvc gdi+ image

我的服务器上的ASP.NET应用程序在运行几天后开始抛出GDI +异常.重新启动服务器后,所有工作正常几天,然后突然再次发生此异常.在第一次发生之后,每当我尝试保存PNG图像时都会发生,直到我再次重新启动.

当我尝试以JPEG格式保存图像时,它工作正常.

当我从我的项目运行此代码时,它失败:

var path = @"C:\Project\images\logo.png";
var image = Image.FromFile(path);

using (var ms = new MemoryStream())
{
    image.Save(ms, ImageFormat.Png);     // Fails here on GDI+ exception.
    //image.Save(ms, ImageFormat.Jpeg);  // JPEG works somehow
}
Run Code Online (Sandbox Code Playgroud)

再说一次:当我重新启动远程桌面并运行此代码时,它会工作几天,并在某个时刻突然开始一次又一次地失败.

我试过了:

  1. 使用相同的代码创建控制台应用程序并在项目所在的RDP中运行它.它工作正常!

  2. 我在这个主题上阅读的10多篇文章中提出了很多不同的代码变体.

  3. GCI.Collect() - 没有帮助.

  4. 检查了所有具有写权限的文件夹(也许IIS有什么东西?).

  5. 更多.

我认为它应该是一些突然因某些东西而改变的配置,我无法理解它是什么.

Zag*_*Nut 9

重新启动服务器后,所有工作正常几天,然后突然发生此异常,并在第一次发生后,每次我尝试保存PNG图像时都会发生,直到我将重新启动.

听起来像是内存泄漏给我.这个编译的.NET版本是什么?运行什么服务器操作系统?

您可以将图像封闭在使用块中:

var path = @"C:\Project\images\logo.png";
using (Image image = Image.FromFile(path))
{
    using (var ms = new MemoryStream())
    {
        image.Save(ms, ImageFormat.Png);
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为此链接与您的案例相关.