iTextSharp - 非常大的表内存泄漏

时间:2012-12-31 11:43:26

标签: c# pdf-generation itextsharp

我有一个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);
 }

当我运行它时,它会导致可怕的内存泄漏。 我可以做些什么改进呢?

1 个答案:

答案 0 :(得分:1)

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

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