だから私は100002ページのPDFファイルを取り、それらをiTextSharpで1つにマージしています。
これは私がやっていることのいくつかの緩いコードです:
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);
}
}
ボトルネックが2か所にある可能性がある場所を理解しようとしています。私はいくつかのパフォーマンステストを実行しましたが、最も遅いプロセスはPdfReaderを使用して各ファイルを自然に読み取り、ファイルを保存しているdisposeは、usingPdfWriterブロックから呼び出されます。
このプロセスでは、16コアすべてで約25%の使用率が得られています。SATA 7.2k rpmドライブの代わりにソリッドステートドライブを試しましたが、ほぼ同じ速度です。
このプロセスをどのようにスピードアップできますか?コンピューター間の読み取り速度がさらに遅くなるため、タスクを分散することはできません。別の言語やライブラリに変更したり、この下位レベルを作成したりすることを意味する場合でも、このプロセスを現在よりもはるかに速く実行する必要があります。現在、マージには約10分かかります。