标签:c memory memory-leaks pdf itextsharp
我必须将多个1页pdf合并为一个pdf.我正在使用iTextSHarp 5.5.5.0来实现这一目标,但是当我合并超过900-1000 pdf时,我得到一个内存不足异常.我注意到,即使我释放我的阅读器并关闭它,内存永远不会被正确清理(进程使用的内存量永远不会减少)所以我想知道我可能做错了什么.这是我的代码:
using (MemoryStream msOutput = new MemoryStream())
{
Document doc = new Document();
PdfSmartCopy pCopy = new PdfSmartCopy(doc, msOutput);
doc.Open();
foreach (Tuple<string, int> file in filesList)
{
PdfReader pdfFile = new PdfReader(file.Item1);
for (int j = 0; j < file.Item2; j++)
for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)//in this case it's always 1.
pCopy.AddPage(pCopy.GetImportedPage(pdfFile, i));
pCopy.FreeReader(pdfFile);
pdfFile.Close();
File.Delete(file.Item1);
}
pCopy.Close();
doc.Close();
byte[] content = msOutput.ToArray();
using (FileStream fs = File.Create(Out))
{
fs.Write(content, 0, content.Length);
}
}
它永远不会写入文件,我在p.Copy()期间得到一个内存不足异常.AddPage()部分.我甚至尝试刷新pCopy变量,但没有改变任何东西.我查看了iText的文档以及围绕StackOverflow的各种问题,但在我看来,我正在采取一切建议来保持较低的内存使用率,但这种情况并没有发生.
有什么想法吗?
解决方法:
由于这是大量的东西,我建议直接写入FileStream而不是MemoryStream.这可能是一个实际情况,其中内存异常可能实际上意味着“内存不足”.
此外,正如Bruno指出的那样,不幸的是,PdfSmartCopy的“智能”部分也是以内存为代价的.切换到PdfCopy应该会降低内存压力,尽管最终的PDF可能会更大.
标签:c,memory,memory-leaks,pdf,itextsharp 来源: https://codeday.me/bug/20190528/1171026.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。