You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by "Steve Jones (JIRA)" <xa...@xml.apache.org> on 2011/01/03 21:19:45 UTC
[jira] Created: (XALANJ-2530) Poor performance transforming from
SAX to DOM with large text content
Poor performance transforming from SAX to DOM with large text content
---------------------------------------------------------------------
Key: XALANJ-2530
URL: https://issues.apache.org/jira/browse/XALANJ-2530
Project: XalanJ2
Issue Type: Improvement
Security Level: No security risk; visible to anyone (Ordinary problems in Xalan projects. Anybody can view the issue.)
Components: JAXP
Affects Versions: 2.7.1
Environment: java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) 64-Bit Server VM (build 19.0-b09, mixed mode)
Linux 2.6.34.7-66.fc13.x86_64 #1 SMP Wed Dec 15 07:04:30 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux
Reporter: Steve Jones
Xalan performs poorly when transforming a SAX source to a DOM result when the input contains large amounts of contiguous text.
The following test shows that Xalan takes 45 seconds to process the test document, but the "Sun" JDK transformer takes under half a second.
// Generate XML with large text content
final int bufferSize = 1024*1024*5;
final StringBuilder stringBuilder = new StringBuilder(bufferSize);
stringBuilder.append( "<test-document>" );
for ( int i=0; i< 1000000; i++ ) { stringBuilder.append( "text " ); }
stringBuilder.append( "</test-document>" );
final String testDocument = stringBuilder.toString();
System.out.println( "Test document size : " + testDocument.length() + "/" + bufferSize );
// Process it
//System.setProperty( "javax.xml.transform.TransformerFactory", "com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl" );
final javax.xml.transform.Transformer transformer = javax.xml.transform.TransformerFactory.newInstance().newTransformer( );
final javax.xml.transform.sax.SAXSource source = new javax.xml.transform.sax.SAXSource( new org.xml.sax.InputSource( new java.io.StringReader( testDocument ) ) );
final javax.xml.transform.dom.DOMResult result = new javax.xml.transform.dom.DOMResult();
final long startTime = System.currentTimeMillis();
transformer.transform( source, result );
System.out.println( ( System.currentTimeMillis() - startTime ) + "ms" );
It could be argued that this is a DOM implementation issue (due to the poor performance of CharacterData.appendData), but it seems easy to fix within Xalan.
The "Sun" JDK solution to this issue can be seen in the class:
com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM
which uses a StringBuilder to buffer the character data.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-dev-help@xml.apache.org