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

标签 c# asp.net-mvc image iis gdi+

我服务器上的一个 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
}

再一次:当我重新启动远程桌面并运行这段代码时,它工作了几天,然后在某个时刻突然开始一遍又一遍地失败。

我试过了:

  1. 使用相同的代码制作控制台应用程序并在项目所在的 RDP 中运行它。效果很好!

  2. 我阅读的 10 多篇关于该主题的文章中建议了很多不同的代码变体。

  3. GCI.Collect() – 没有帮助。

  4. 检查了所有有写权限的文件夹(可能IIS有问题?)。

  5. 更多。

我觉得应该是什么配置突然变了,搞不懂会是什么。

最佳答案

After I restart the server all works fine for a couple of days and then suddenly this exception occurs and after the first time it occurs it will occur everytime I try to save the PNG image, until I will restart again.

对我来说听起来像是内存泄漏。这是编译成什么 .NET 版本?这运行在什么服务器操作系统上?

您可以先将图像包含在 using block 中:

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

This link我相信与您的情况有关。

关于c# - 以 PNG 格式保存图像时出现 GDI+ 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39259352/

相关文章:

c# - 如何使用 WinForms 的现有组件创建类似 Google 的日历

c# - 从 C# 将原始 SOAP XML 直接发送到 WCF 服务

c# - 在异步任务中使用 HttpContext

html - 无法在媒体查询中指定要替换的 img

c# - 实时生成图像的算法帮助

c# - 在目录中查询完整的文件(不是正在进行的复制)

c# - 为什么 C#/.NET 字符串以长度为前缀并以 null 结尾?

html - 悬停时显示图像,在背景中居中

asp.net-mvc - 将 View 模型中的值传递给 Controller ​​中的后 ActionResult

c# - 使用 C# 格式化 Twitter 文本 (TweetText)