A use case required combining just above 1000 PDF files (1 page each) and the gem struggled.
I noticed that CombinePDF::PDF#to_pdf instantiates way to many String objects.
Benchmarks showed these objects occupied 16GB of memory (in the case from above) while after the patch thIs number went down to 258MB.
Changes:
Instantiates fewer String object by appending to existing strings which it is more performant than using the + operator.
Appends to the last item in the array instead of popping and adding another one back.
Extracts a constant.
A use case required combining just above 1000 PDF files (1 page each) and the gem struggled. I noticed that CombinePDF::PDF#to_pdf instantiates way to many String objects. Benchmarks showed these objects occupied 16GB of memory (in the case from above) while after the patch thIs number went down to 258MB.
Changes: Instantiates fewer String object by appending to existing strings which it is more performant than using the + operator. Appends to the last item in the array instead of popping and adding another one back. Extracts a constant.