对于我的项目,我需要为PDF文档绘制一些通用控件。 我正在转换的控件可以有子控件。有时,它们可以达到12级递归。 为了在PDF中反映这种行为,我选择了PdfPTable类作为我的控件的基类,因为它们可以有子控件(单元格)。
这一切都很好,但是当递归深度增加时变得非常慢。这是我在性能测试中使用的代码:
private const int MaxDepth = 12;
private static void NestTable(PdfPCell cell, int level)
{
//check max depth
if (level == MaxDepth)
{
return;
}
//create new table with one column
var table = new PdfPTable(1);
//Display the current depth in the cell
var mainCell = new PdfPCell { Phrase = new Phrase(level) };
//recursion here:
NestTable(mainCell, level + 1);
//add the cell to the control tree
table.AddCell(mainCell);
//add table to the parent cell
cell.AddElement(table);
}
以下是我用此代码创建表格的时间片段,然后针对 MaxDepth 的不同值调用document.Add(table)
:
7: 91 ms
8: 168ms
9: 356ms
10: 920ms
11: 978ms
12: 2757ms
13: 8358ms
14: 25449ms
这些时间对我来说似乎是不可接受的。 有谁知道如何提高嵌套表的性能? 或者我应该避免使用表(PdfPTable)并使用另一个具有相同输出的类吗?
感谢任何帮助!