C# jpeg图片上的System.Drawing.Image内存不足
我正在图片上添加水印。在几张图片之后,C# jpeg图片上的System.Drawing.Image内存不足,c#,asp.net,image,C#,Asp.net,Image,我正在图片上添加水印。在几张图片之后,System.Drawing.Image给出一个错误-内存不足。我的文件夹里有2000张照片。我也在using中处置了我的对象和using,但它的内存仍然不足 Using (System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath(path))) { using ( Bitmap bmp = new Bitmap(img.Width, img.Height)) {
System.Drawing.Image
给出一个错误-内存不足。我的文件夹里有2000张照片。我也在using
中处置了我的对象和using
,但它的内存仍然不足
Using (System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath(path)))
{
using ( Bitmap bmp = new Bitmap(img.Width, img.Height))
{
Graphics pic = Graphics.FromImage(bmp);
Font font = new Font("Arial", 11);
SolidBrush brush = new SolidBrush(Color.Orange);
pic.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height));
pic.DrawString(location, font, brush, 0f, bmp.Height - 20);
pic.DrawString(date, font, brush, 300, bmp.Height - 20);
System.Drawing.Image img3 = (System.Drawing.Image) bmp;
string NewPath = path.Insert(path.IndexOf('.'), "-wm");
img3.Save(Server.MapPath(NewPath));
img3.Dispose();
bmp.Dispose();
img.Dispose();
font.Dispose();
pic.Dispose();
brush.Dispose();
}
}
这是代码,我所有的图片都是jpeg格式。我认为你的代码看起来不错。虽然我可以想象,在某种情况下,您的代码可能会导致错误 在使用图像时,较大的对象堆可能会发挥作用。因此,运行代码时,内存碎片可能是一个问题。 (详情请参阅) 因此,您可以尝试使用:
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
我想知道这是否解决了你的问题。在任何情况下,如果你能提供更多的细节到这个主题-这将是伟大的 你能检查一下,你是否在某个图像上得到了这个异常?我只是想到了LOH——这可能是一个问题。也许您的LOH碎片太多,因此无法分配新对象。查看您使用的框架版本?您好,我想问题在于图片中的一些图片像素与图像类不匹配。您是否尝试了
GC.Collect(…)
(请参阅)或类似的方法?@PilgerstorferFranz好的,谢谢,现在我正在阅读