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 页的报告,所以这是一个主要问题。

有什么我可以做的:

  1. 没有 运行 内存不足(必需)
  2. 加快文件创建速度(理想情况下)

请注意:生成的报告(使用较小的数据集)是准确的,尽管文件相当大。

这是我的代码示例:

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 位也有所帮助。