如何避免 'System.OutOfMemoryException' 在 asp.net mvc c# 中使用 iTextSharp 合并大量 PDF 文件

how to avoid 'System.OutOfMemoryException' Merging large number of PDF files using iTextSharp in asp.net mvc c#

我在 asp.net mvc c# 中使用 iTextSharp 合并大量 pdf 文件,它适用于少量文件,但当它达到大约 (1000) 个文件时,它会在线中断 pdf.AddDocument (reader);并抛出 'System.OutOfMemoryException'。 我已经在使用 PdfCopy 和 FileStream 来更好地利用我搜索过的每个地方都建议的内存。我的代码如下。请建议我如何处理这个问题。

        using (FileStream stream = new FileStream(outMergeFile, FileMode.Create))
        {
            Document document = new Document();
            PdfCopy pdf = new PdfCopy(document, stream);
            PdfReader reader = null;
            PdfReader.unethicalreading = true;
            try
            {
                document.Open();
                for (int i = 0; i < fileList.Count; i++)
                {
                    var fileStr = Request.MapPath(fileList[i].Path)                            
                    reader = new PdfReader(fileStr);
                        
                    pdf.AddDocument(reader);
                    reader.Close();
                }
            }
            catch (Exception ex)
            {
                reader.Close();
            }
            finally
            {
                document.Close();
            }
        }

添加

pdf.FreeReader(reader);

就在

之前
reader.Close();

确保管理从 reader 复制的内容所需的内存尽可能少。

该方法(PdfCopy 的父 class 的方法)记录为 将 reader 写入文档并 释放内存被它使用。主要用途是在连接多个文档时将内存使用限制在当前附加文档中。