![](/img/trans.png)
[英]'System.OutOfMemoryException' was thrown while uploading large file
[英]PDFClown System.OutOfMemoryException while populating large file
我正在使用来自数据库的数据使用PDFClown生成大型Report 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();
}
函数: ReportFonts.GetFont(...)
每次调用一次都会创建一个新字体。 然后,此字体存储在dll的内存空间中,最终文件占用了很大的空间。
使用Dictionary <>解决了这个问题,不仅内存空间干净而且文件大小可以接受,而且执行时间也大大缩短了。
迁移到64位也有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.