1

私は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());

ドム

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());

私の質問は:私はそれを正しくやっていますか?パーサーをテストするための他のアプローチはありますか? ありがとう

4

2 に答える 2

2

JAXP ファクトリ クラスの作成は非常にコストのかかる操作であり、そのコストはクラスパスに存在する JAR によって大きく異なります。あなたは本当にそれを測定したくありません。

Java の起動コストをなくすように注意する必要があります。測定を開始する前に、いくつかのドキュメントを解析します。測定を繰り返し実行し、結果を平均して、結果が一貫していることを確認します。

さまざまなサイズのドキュメントでテストを実行します。通常、コストは (ax+b) で、x はドキュメント サイズです。ここでの数字「b」は「ドキュメントごとのオーバーヘッド」を表し、ドキュメントが小さい場合は非常に重要になる可能性があります。

DOM の場合、ガベージ コレクションが発生する可能性があり、予期しないタイミングで発生するため、結果が歪む可能性があります。一貫した測定値を取得するために、既知の時間にガベージ コレクションを強制することが推奨される場合があります。

于 2013-05-02T06:51:05.083 に答える