PDFClown System.OutOfMemoryException 正在填充大文件
PDFClown System.OutOfMemoryException while populating large file
我正在使用 PDFClown 使用数据库中的数据生成一个大型报告 pdf 文件。
这个过程需要很长时间,最终 运行 当页数接近 150 标记占用超过 1.5GB 的 ram 并出现错误时 运行s 内存不足:
A first chance exception of type 'System.OutOfMemoryException' occurred in PDFClown.dll
因为我需要定期生成超过 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();
}
示例报告页面的屏幕截图(出于客户隐私原因进行了编辑):
函数:ReportFonts.GetFont(...)
每次调用时都会创建一种新字体。
该字体随后存储在 dll 的内存中 space 和占用如此多空间的最终文件 space.
使用字典<>解决了问题,不仅内存space干净,文件大小可以接受,而且执行时间也大大缩短。
迁移到 64 位也有所帮助。
我正在使用 PDFClown 使用数据库中的数据生成一个大型报告 pdf 文件。
这个过程需要很长时间,最终 运行 当页数接近 150 标记占用超过 1.5GB 的 ram 并出现错误时 运行s 内存不足:
A first chance exception of type 'System.OutOfMemoryException' occurred in PDFClown.dll
因为我需要定期生成超过 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();
}
示例报告页面的屏幕截图(出于客户隐私原因进行了编辑):
函数:ReportFonts.GetFont(...)
每次调用时都会创建一种新字体。
该字体随后存储在 dll 的内存中 space 和占用如此多空间的最终文件 space.
使用字典<>解决了问题,不仅内存space干净,文件大小可以接受,而且执行时间也大大缩短。
迁移到 64 位也有所帮助。