【发布时间】:2018-07-16 18:58:38
【问题描述】:
我正在使用 PDFClown 使用数据库中的数据生成一个大型报告 pdf 文件。
当页面数接近 150 标记占用超过 1.5GB 的内存并出现错误时,该过程需要很长时间并最终耗尽内存:
在 PDFClown.dll 中发生了“System.OutOfMemoryException”类型的第一次机会异常
因为我需要定期生成超过 1500 页的报告,所以这是一个主要问题。
有什么我可以做的:
- 内存未用完(必需)
- 加快文件创建速度(理想情况下)
请注意:生成的报告(使用较小的数据集)是准确的,尽管文件相当大。
这是我的代码示例:
protected void PopulateReport()
{
foreach (Page page in _lstPages)
{
if (page != _Titlepage)
{
PrimitiveComposer composer = new PrimitiveComposer(page);
BlockComposer blockComposer = new BlockComposer(composer);
DataRow drInspection;
if (_mapPage1Rows.TryGetValue(page, out dataRow))
{
GeneratePage1(page, composer, blockComposer, dataRow);
}
else if (_mapPage2Rows.TryGetValue(page, out dataRow))
{
GeneratePage2(page, composer, blockComposer, dataRow);
}
}
}
}
protected void GeneratePage1()
{
composer.BeginLocalState();
composer.SetFont(ReportFonts.GetFont(GetPDFDocument(), bIsFieldName, false), nFontSize);
blockComposer.Begin(GetRectangle(fMarginX, fMarginY, fWidth, nFontSize), AlignX, AlignY);
int nIndex = blockComposer.ShowText(strText, false);
blockComposer.End();
....
composer.End();
composer.Flush();
}
【问题讨论】:
-
报告是什么样的?里面有多少数据? 150 页 PDF 的 1.5GB 内存似乎很大。
-
Project > Properties > Build 选项卡,取消勾选“Prefer 32-bit”复选框。你不喜欢它。
-
在 64 位执行中,内存最高为 3.6GB,最终文件大小为 359MB,文档中只有区区 153 页。
标签: c# out-of-memory pdfclown