Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# jpeg图片上的System.Drawing.Image内存不足_C#_Asp.net_Image - Fatal编程技术网

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好的,谢谢,现在我正在阅读