繁体   English   中英

Java解析器测试

[英]Java parsers testing

我正在测试DOM,SAX和StAX的效率。

基本上我所做的是,我使用弹簧秒表和不同大小的XML,然后比较结果。

我还认为我可以在元素加载到对象和对象到数组时测量时间,但这与分析无关。

这是我的SAX代码

  StopWatch stopWatch = new StopWatch("SAX");
  stopWatch.start("SAX");  
  SAXParserFactory spf = SAXParserFactory.newInstance();
  spf.setValidating(false);
  SAXParser sp = spf.newSAXParser();
  XMLReader parser = sp.getXMLReader();
  parser.setErrorHandler(new Chyby());
  parser.setContentHandler(new DefaultHandler());
  parser.parse(file);
 stopWatch.stop();
 System.out.println(stopWatch.prettyPrint());

对于StAX

  int temp = 0;
  StopWatch stopWatch = new StopWatch("StAX");
  stopWatch.start("StAX");    
  XMLInputFactory f = XMLInputFactory.newInstance();
  XMLStreamReader r = f.createXMLStreamReader( new FileInputStream( file ));   
    while (r.hasNext()==true){
    temp++;
    r.next();
    }
     System.out.println("parsed");
  stopWatch.stop();
 System.out.println(stopWatch.prettyPrint());

DOM

StopWatch stopWatch = new StopWatch("DOM");
stopWatch.start("DOM");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(subor);
System.out.println("parsed");
System.out.println("----------------\n");
    stopWatch.stop();
 System.out.println(stopWatch.prettyPrint());

我的问题是:我做得对吗? 还有其他测试解析器的方法吗? 谢谢

创建JAXP工厂类是一项非常昂贵的操作,其成本在很大程度上取决于类路径中存在的JAR。 你真的不想衡量它。

您需要注意消除Java启动成本。 在开始测量之前解析一些文档。 重复运行测量,平均结果,并检查结果是否一致。

我会用不同大小的文件进行测试。 通常,成本将是(ax + b),其中x是文档大小。 这里的数字'b'代表“每个文档的开销”,如果文档很小,则可能非常重要。

在DOM的情况下,可能会发生垃圾收集,这会导致结果失真,因为它们在不可预测的时间发生。 有时建议在已知时间强制进行垃圾收集以获得一致的测量结果。

您可能希望将工厂的创建考虑在性能运行之外,或者单独测量它们。 您可能希望触摸所有数据以防止解析器错误地看起来好懒得构建对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM