[
https://issues.apache.org/jira/browse/PDFBOX-3103?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15028333#comment-15028333
]
Tomasz Pawlak commented on PDFBOX-3103:
---------------------------------------
If file is smaller than the buffer size, the buffer won't be fully filled and
this is properly handled by {{BufferedRandomAccessFile}}. Semantics of
{{RandomAccessFile}} and {{BufferedRandomAccessFile}} is exactly the same, EOF
(-1 in case of {{read()}} method) will be returned at correct position in file.
I didn't test other buffer sizes, however it seems to be of lower importance.
Any buffering mechanism should be better than none.
The Maruan's findings of memory usage seems to be correct. Buffer is created
once for every font file (see constructor of {{BufferedRandomAccessFile}}),
thus for 876 fonts opened together sum of memory used by the buffers is 876 *
64KB = 56064KB = 55MB. By lowering buffer size twice, we can reduce memory
usage to ~27MB. From my perspective, it is acceptable amount, given than the
whole application takes over 250MB.
> Slow performance when printing PDF (fix provided)
> -------------------------------------------------
>
> Key: PDFBOX-3103
> URL: https://issues.apache.org/jira/browse/PDFBOX-3103
> Project: PDFBox
> Issue Type: Improvement
> Components: FontBox
> Affects Versions: 2.0.0
> Reporter: Tomasz Pawlak
> Labels: easyfix, easytest, optimization, patch
> Attachments: RAFDataStream.java, RAFDataStream.java.patch, test.pdf
>
> Original Estimate: 1h
> Remaining Estimate: 1h
>
> When printing a PDF document (4 pages, 177KB, link below) using command
> {code}
> java -jar pdfbox-app-2.0.0-RC1.jar PrintPDF test.pdf
> {code}
> processing of the document before print takes about 15 seconds on system with
> Core i5-4670 processor.
> Most of the time is wasted on reading font files from system. The reason is
> that the font is read byte by byte in an unbuffered manner. The defective
> code is located in class {{org.apache.fontbox.ttf.RAFDataStream}}, where new
> instance of {{RandomAccessFile}} is created without buffering.
> I prepared a buffer wrapper over {{RandomAccessFile}} that adds buffering to
> {{RandomAccessFile}}. Use of the buffer in {{RAFDataStream}} shortens
> printing time *5 times*, i.e., printing takes 3 seconds instead of 15s.
> The wrapper class is augmented version of a class released at
> https://code.google.com/p/jmzreader/wiki/BufferedRandomAccessFile (Apache
> License 2.0).
> Please integrate provided fix with original source of FontBox.
> PDF document and fix are available at http://1drv.ms/1NsKPFc
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]