我服务器上的一个 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
}
再一次:当我重新启动远程桌面并运行这段代码时,它工作了几天,然后在某个时刻突然开始一遍又一遍地失败。
我试过了:
使用相同的代码制作控制台应用程序并在项目所在的 RDP 中运行它。效果很好!
我阅读的 10 多篇关于该主题的文章中建议了很多不同的代码变体。
GCI.Collect() – 没有帮助。
检查了所有有写权限的文件夹(可能IIS有问题?)。
更多。
我觉得应该是什么配置突然变了,搞不懂会是什么。
最佳答案
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/