boazsegev / combine_pdf

A Pure ruby library to merge PDF files, number pages and maybe more...
MIT License
733 stars 154 forks source link

improve memory usage #233

Closed denislavski closed 8 months ago

denislavski commented 9 months ago

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.

denislavski commented 9 months ago

Related to: https://github.com/boazsegev/combine_pdf/issues/224