c# - iTextSharp - 非常大的表内存泄漏

标签 c# pdf-generation itext

我有一个 SqlDataReader 读取大型记录集(大约 1M 条记录),我正尝试使用 iTextSharp 将其导出到 PDF 文档。 这是我的代码:

 if (reader.HasRows)
 {
    int rowNum = 0;
    while (reader.Read())
    {
       if (rowNum % 2 == 1)
          datatable.DefaultCell.GrayFill = 0.8f;
       else
          datatable.DefaultCell.GrayFill = 0.95f;
       if (meRes.Trans(Lang, "Dir", CompanyID).ToUpper() == "RTL")
          for (int i = reader.FieldCount - 1; i >= 0; i--)
          {
             object o = reader[i];
             datatable.AddCell(new Phrase(o.ToString(), fntList));
          }
       else
          for (int i = 0; i < reader.FieldCount; i++)
             {
                object o = reader[i];
                datatable.AddCell(new Phrase(o.ToString(), fntList));
             }
       rowNum++;
   }
    myDocument.Add(datatable);
 }

当我运行它时,它导致了严重的内存泄漏。 我可以做些什么来改善这一点?

最佳答案

可以设置每页行数,减少内存压力

if (rowNum>0 && table1.Rows.Count % 7 == 0) // 7 = number of rows per page
{
   pdfDoc.Add(table1);
   table1.DeleteBodyRows(); // free resources
   pdfDoc.NewPage();
}

关于c# - iTextSharp - 非常大的表内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14101142/

相关文章:

c# - 当我们指定了类的访问说明符时,是否有任何约束来指定类成员的访问说明符?

pdf-generation - 在 wiki 中创作,生成 PDF 文档、CHM 文件或嵌入式帮助

javascript - 如何使用 javascript 打印条码或以 pdf 格式导出条码

Itext 在渲染字体时出现问题

c# - Akka.NET集群节点优雅关机

c# - 有必要在WPF MVVM中对ICommand类型的属性使用INotifyPropertyChanged吗?

c# - 如何修复 ASP.NET 5 中的 CS0433 错误?

java - 如何将不同的字体应用于 iText 中 PDFPCell 中的段落和 block

java - number 不能包裹在 flyingsaucer 和 itext 中

c# - 将 PDF 合并在一起后如何解锁文件以进行删除