axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dennis Sosnoski <...@sosnoski.com>
Subject Re: [Axis2] AXIOM vs. JDOM trivial perf test
Date Thu, 30 Mar 2006 21:12:02 GMT
You might want to just add this on to the one I created, Glen: 
http://issues.apache.org/jira/browse/AXIS2-533 I include JDOM in my test 
code there (using the Piccolo SAX parser), but didn't discuss the JDOM 
results in the text since dom4j is generally faster and smaller.

  - Dennis

Davanum Srinivas wrote:

>Glen,
>
>Could up please send the bigfile.xml as well? Better to do it via JIRA.
>
>thanks,
>dims
>
>On 3/30/06, Glen Daniels <glen@thoughtcraft.com> wrote:
>  
>
>>Hi folks:
>>
>>The following is a quick test which takes an XML input file, parses it,
>>and walks the tree collecting all text content.  It does this using both
>>JDOM (note that you'll need the StAXBuilder and StAXTextModifier which
>>you can find at http://svn.woodstox.codehaus.org/utils/jdom/) and AXIOM,
>>100 times each, and then averages the timings.  The code is as close to
>>identical as I could get for the two packages.
>>
>>For the file I'm working with (about 150K) I'm seeing AXIOM get an
>>average time around 180ms, whereas JDOM comes in at around 77ms.  The
>>strings match up.  This could be better, because frankly JDOM is way
>>easier to use. :)
>>
>>I think it might be time to integrate some performance testing into our
>>builds, and to do some optimization on AXIOM.  I haven't yet looked at
>>comparing memory footprints, but may try to do that sometime soon.
>>
>>--Glen
>>
>>--------
>>
>>import org.apache.axiom.om.OMXMLParserWrapper;
>>import org.apache.axiom.om.OMAbstractFactory;
>>import org.apache.axiom.om.OMElement;
>>import org.apache.axiom.om.OMNode;
>>import org.apache.axiom.om.impl.llom.factory.OMXMLBuilderFactory;
>>import org.jdom.input.StAXBuilder;
>>import org.jdom.Document;
>>import org.jdom.Element;
>>import org.jdom.Content;
>>
>>import javax.xml.stream.XMLStreamReader;
>>import javax.xml.stream.XMLInputFactory;
>>import java.io.FileInputStream;
>>import java.util.Iterator;
>>import java.util.List;
>>import java.util.Date;
>>
>>public class Test {
>>     static class Timer {
>>         long startTime;
>>         long stopTime;
>>
>>         public void start() {
>>             startTime = new Date().getTime();
>>         }
>>
>>         public long stop() {
>>             stopTime = new Date().getTime();
>>             return (stopTime - startTime);
>>         }
>>     }
>>
>>     // A place to save the string length for comparison purposes
>>     static int strLen = 0;
>>
>>     public static void main(String[] args) throws Exception {
>>         // Replace with any big file
>>         String FILENAME = "Scratch/bigfile.xml";
>>
>>         int NUM_RUNS = 100;
>>         long accum = 0;
>>
>>         for (int i = 0; i < NUM_RUNS; i++) {
>>             FileInputStream fis = new FileInputStream(FILENAME);
>>             XMLStreamReader parser =
>>XMLInputFactory.newInstance().createXMLStreamReader(fis);
>>             accum += runAXIOMTest(parser);
>>             parser.close();
>>             fis.close();
>>         }
>>         System.out.println("OM avg was " + (accum / NUM_RUNS) +
>>                 " (" + strLen + ")");
>>
>>         strLen = 0;
>>         accum = 0;
>>
>>         for (int i = 0; i < NUM_RUNS; i++) {
>>             FileInputStream fis = new FileInputStream(FILENAME);
>>             XMLStreamReader parser =
>>XMLInputFactory.newInstance().createXMLStreamReader(fis);
>>             accum += runJDOMTest(parser);
>>             parser.close();
>>             fis.close();
>>         }
>>         System.out.println("JDOM avg was " + (accum / NUM_RUNS) +
>>                 " (" + strLen + ")");
>>     }
>>
>>     public static long runAXIOMTest(XMLStreamReader parser) throws
>>Exception {
>>         Timer t = new Timer();
>>         t.start();
>>         OMXMLParserWrapper builder =
>>OMXMLBuilderFactory.createStAXOMBuilder(OMAbstractFactory.getOMFactory(),
>>parser);
>>         OMElement root = builder.getDocumentElement();
>>         StringBuffer buf = new StringBuffer();
>>         genAXIOMString(root, buf);
>>         long elapsed = t.stop();
>>         if (strLen == 0) {
>>//            System.out.println("[" + buf.toString() + "]");
>>             strLen = buf.length();
>>         }
>>         return elapsed;
>>     }
>>
>>     public static long runJDOMTest(XMLStreamReader parser) throws
>>Exception {
>>         Timer t = new Timer();
>>         t.start();
>>         StAXBuilder builder = new StAXBuilder();
>>         Document doc = builder.build(parser);
>>         StringBuffer buf = new StringBuffer();
>>         Element root = doc.getRootElement();
>>         genJDOMString(root, buf);
>>         long elapsed = t.stop();
>>         if (strLen == 0) {
>>//            System.out.println("[" + buf.toString() + "]");
>>             strLen = buf.length();
>>         }
>>         return elapsed;
>>     }
>>
>>     // These two methods do the exact same thing, one for AXIOM and one
>>     // for JDOM.  Walk the tree and collect all the text.
>>
>>     public static void genAXIOMString(OMElement el, StringBuffer buf) {
>>         buf.append(el.getText());
>>         Iterator i = el.getChildren();
>>         while (i.hasNext()) {
>>             OMNode node = (OMNode)i.next();
>>             if (node instanceof OMElement) {
>>                 OMElement element = (OMElement) node;
>>                 genAXIOMString(element, buf);
>>             }
>>         }
>>     }
>>
>>     public static void genJDOMString(Element el, StringBuffer buf) {
>>         buf.append(el.getText());
>>         List children = el.getChildren();
>>         for (Iterator i = children.iterator(); i.hasNext();) {
>>             Content content = (Content)i.next();
>>             if (content instanceof Element) {
>>                 Element element = (Element)content;
>>                 genJDOMString(element, buf);
>>             }
>>         }
>>     }
>>}
>>
>>    
>>
>
>
>--
>Davanum Srinivas : http://wso2.com/blogs/
>
>  
>

Mime
View raw message