簡體   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