You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Andreas Lehmkühler (JIRA)" <ji...@apache.org> on 2010/05/09 19:36:48 UTC
[jira] Resolved: (PDFBOX-410) Two small performance issue in
COSString, these are not bugs
[ https://issues.apache.org/jira/browse/PDFBOX-410?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andreas Lehmkühler resolved PDFBOX-410.
---------------------------------------
Fix Version/s: 1.2.0
Resolution: Fixed
I've followed the given hints and added some more changes (StringBulde instead of StringBuffer) with version 942567.
Thanks to Peter and Lars for the hints.
> Two small performance issue in COSString, these are not bugs
> ------------------------------------------------------------
>
> Key: PDFBOX-410
> URL: https://issues.apache.org/jira/browse/PDFBOX-410
> Project: PDFBox
> Issue Type: Improvement
> Affects Versions: 0.8.0-incubator
> Environment: All
> Reporter: Peter_Lenahan@ibi.com
> Priority: Trivial
> Fix For: 1.2.0
>
>
> There were 2 small issues here. Both performance related, but I assume that this method createFromHexString is called a lot.
> These are not bugs.
> From this article:
> http://www.javaworld.com/javaworld/jw-04-1997/jw-04-optimize.html?page=5
> Comparing against zero is almost always more efficient in any language since the underlying tests are based on < 0,<= 0, == 0, != 0, >= 0 and > 0.
> package org.apache.pdfbox.cos;
> // original code.
> public static COSString createFromHexString( String hex ) throws IOException
> COSString retval = new COSString();
> StringBuffer hexBuffer = new StringBuffer( hex.trim() );
> //if odd number then the last hex digit is assumed to be 0
> if( hexBuffer.length() % 2 == 1 )
> {
> hexBuffer.append( "0" );
> }
> for( int i=0; i<hexBuffer.length();)
> {
> // Same code with 3 small changes applied.
> // test for null optional, since it should never happen
> // compare to zero instead of 1
> // added loop invariant variable hexBufferLength
> public static COSString createFromHexString( String hex ) throws IOException
> COSString retval = new COSString();
> // should you add a test for null here?
> if (hex == null) // this should never happen
> return null;
> // or
> return retval; // ??
> StringBuffer hexBuffer = new StringBuffer( hex.trim() );
> // slightly changed code to improve effiency of the loop.
> int hexBufferLength= hexBuffer.length();
> if( hexBufferLength % 2 != 0 ) // add comparison against zero values of mod 2 can only be 0 or 1
> {
> hexBuffer.append( "0" );
> }
> // hexBuffer.length() is a loop invariant, and will not change within the loop,
> // calling the method on each iteration is not efficient.
> // better to create a local variable and reference it at the top of the loop.
> for( int i=0; i<hexBufferLength;)
> {
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.