因此,我将 10000 个 2 页 pdf 文件与 iTextSharp 合并为一个。
这是我正在做的一些松散的代码:
Document document = new Document();
using(PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("merged.pdf", FileMode.Create)))
{
PdfContentByte cb = writer.DirectContent;
PdfReader reader = null;
foreach(string thisFile in files)
{
reader = new PdfReader(thisFile);
var page1 = writer.GetImportedPage(reader, 1);
var page2 = writer.GetImportedPage(reader, 2);
cb.AddTemplate(page1, 1f, 0, 0, 1f, 0, 0);
cb.AddTemplate(page2, 1f, 0, 0, 1f, 0, 0);
}
}
我试图了解瓶颈可能在两个地方。我进行了一些性能测试,最慢的进程自然是使用 PdfReader 读取每个文件以及保存文件的处置,它从 using PdfWriter 块中调用。
在这个过程中,我在所有 16 个内核上获得了大约 25% 的利用率。我尝试了固态驱动器而不是我的 SATA 7.2k rpm 驱动器,它的速度几乎完全相同。
我怎样才能加快这个过程?没有分配任务,因为计算机之间的读取速度会更慢。即使这意味着更改为另一种语言、库或编写这个较低级别的代码,我也需要比现在更快地完成这个过程。现在合并大约需要 10 分钟。