C# 在asp.net中绘制图像时出现内存不足异常

C# 在asp.net中绘制图像时出现内存不足异常,c#,asp.net,image,filestream,C#,Asp.net,Image,Filestream,我们正在使用以下代码绘制和编辑pdf,但是当我们使用11mb大小的文件时,我们的内存出现了异常,我们可以解决这个问题吗?我使用了System.drawing.Image.FromFile而不是FromStream,但没有运气 public static string ImageCar() { string FileName = HttpContext.Current.Session["filename"].ToString(); Document do

我们正在使用以下代码绘制和编辑pdf,但是当我们使用11mb大小的文件时,我们的内存出现了异常,我们可以解决这个问题吗?我使用了
System.drawing.Image.FromFile
而不是FromStream,但没有运气

 public static string ImageCar()
    {

        string FileName = HttpContext.Current.Session["filename"].ToString();
        Document doc = new Document(FileName);

        ArrayList arrFiles = new ArrayList();
        string strFileName = "";
        for (int pageCount = 1; pageCount <= TotalPages; pageCount++)
        {
            using (FileStream imageStream = new FileStream(HttpContext.Current.Server.MapPath("Input/image_" + strDateTime + "_" + pageCount + ".png"), FileMode.Create, FileAccess.ReadWrite))
            {
                strFileName = HttpContext.Current.Server.MapPath("Path" + strDateTime + "_" + pageCount + ".png");
                arrFiles.Add(strFileName);

                PngDevice pngDevice = new PngDevice();
                //Convert a particular page and save the image to stream
                pngDevice.Process(doc.Pages[pageCount], imageStream);
                using (System.Drawing.Image image = System.Drawing.Image.FromStream(imageStream))
                {
                    ScaleImage(image, 1189, 835, HttpContext.Current.Server.MapPath("Input/image1_" + strDateTime + "_" + pageCount + ".png"), out height, out Aratio);
                    image.Dispose();
                    imageStream.Close();
                    if (pageCount == 1)
                        fields = CheckFields(doc, pageCount, "image1_" + strDateTime + "_" + pageCount + ".png", fields, Convert.ToDouble(Aratio), licensed);

                    pages = pages + "," + "image1_" + strDateTime + "_" + pageCount + ".png";
                    Ratios = Ratios + "," + Aratio;
                    Allheights = Allheights + "," + height;

                    // Delete file from image folder
                    try
                    {
                        if (File.Exists(strFileName))
                        {
                            File.Delete(strFileName);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
        }

        Ratios = Ratios.Substring(1, Ratios.Length - 1);
        pages = pages.Substring(1, pages.Length - 1);
        Allheights = Allheights.Substring(1, Allheights.Length - 1);
        if (fields != "")
        {
            fields = fields.Substring(3, fields.Length - 3);
        }

        return pages + "%#" + Ratios + "%#" + Allheights + "%#" + fields;
    }
公共静态字符串ImageCar()
{
字符串FileName=HttpContext.Current.Session[“FileName”].ToString();
文档文档=新文档(文件名);
ArrayList arrFiles=新的ArrayList();
字符串strFileName=“”;

for(int pageCount=1;pageCountSystem.Drawing已知ASP站点内存泄漏,因此不应使用。 它最终会出现OOM错误,虽然您可以通过每隔一段时间重新启动服务器或向服务器投入更多内存来避免错误,但没有真正的长期修复方法。使用其他库处理图像操作部分,问题应该会少一些

请参见本页底部:

Windows或ASP.NET服务中不支持使用System.Drawing命名空间中的类。试图从其中一种应用程序类型中使用这些类可能会产生意外问题,例如服务性能降低和运行时异常。有关支持的替代方法,请参阅Windows Imaging Components


有没有什么方法可以将数据作为垃圾存储在内存中或存储在硬盘中???如果不缩放图像,就可以了。但是如果使用这种方法,缩放是个问题namespace@peter如果这解决了您的问题,请您将答案标记为。谢谢!请记住
OutOfMemoryException
System.Drawing
sfavourite异常。如果有任何原因导致错误,它将尝试将错误解码为几种不同的故障模式之一,但如果它与其中任何一种模式不匹配,它将倾向于通过
OOM
-即使实际错误与内存无关。不要使用
块处置/关闭
中的内容…使用
块处理
ks的存在正是为了自动化这些东西。