繁体   English   中英

填充大文件时出现PDFClown System.OutOfMemoryException

[英]PDFClown System.OutOfMemoryException while populating large file

我正在使用来自数据库的数据使用PDFClown生成大型Report pdf文件。

该过程需要很长时间,并且最终在页数接近150标记时占用了超过1.5GB的内存,并且最终出现内存不足的错误:

PDFClown.dll中发生类型为'System.OutOfMemoryException'的第一次机会异常

由于我将需要定期生成超过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的内存空间中,最终文件占用了很大的空间。

使用Dictionary <>解决了这个问题,不仅内存空间干净而且文件大小可以接受,而且执行时间也大大缩短了。

迁移到64位也有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM