如何避免 '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 写入文档并 释放内存被它使用。主要用途是在连接多个文档时将内存使用限制在当前附加文档中。
我在 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 写入文档并 释放内存被它使用。主要用途是在连接多个文档时将内存使用限制在当前附加文档中。