2011-11-27 2 views
3

코드가 너무 느리지 만 코드를 개선하는 방법을 잘 모르겠습니다. 디스크에서 DOM에 1k 파일을 읽는 데 약 20ms가 걸릴 수 있습니다. 디스크에 따라 다르지만 xpath 명령문에서 작업하는 데 20ms가 걸렸습니다. 너무 많이합니다. 다음은 시간 주석이있는 몇 가지 샘플 코드입니다. 코드를 개선하려면 어떻게해야합니까?DOM 및 XPath 최적화 Java 코드

이 건설 시간에 발생합니다

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder dBuilder = this.dbFactory.newDocumentBuilder(); 
XPathExpression[] ex = new XPathExpression[]{about 30 different expressions} 
XPathExpression mainEx =xPath.compile("/rootElement/firstLevel/secondLevel"); 

를 다음 코드를 :

Document doc = this.dBuilder.parse("somefile.xml"); 
//took 20 ms until here 
NodeList nodes = (NodeList) mainEx .evaluate,doc, XPathConstants.NODESET); 
//took another 20 ms until here !!! 
    for (int i = 0; i < nodes.getLength(); i++) { 
    Node n = nodes.item(i); 
    for (XPathExpression e:ex) { 
     String v = (String) e.evaluate(n, XPathConstants.STRING); 
     if (v != null) { 
      System.out.println(v); 
     } 
    } 
    } 
    //this only takes 5 ms 
+0

아마도 http://stackoverflow.com/questio와 관련이 있습니다. ns/6340802/java-xpath-apache-jaxp-implementation-performance –

+0

VTD-XML으로 전환하십시오. <문제는 사라질 것입니다. –

답변

3

: 기본적으로

Java XPath (Apache JAXP implementation) performance

, 당신은 무겁게의 Xalan의 XPath를 구현 속도를 높이기 위해이 JVM 인수를 추가해야합니다 :

-Dorg.apache.xml.dtm.DTMManager= 
    org.apache.xml.dtm.ref.DTMManagerDefault 

또는

-Dcom.sun.org.apache.xml.internal.dtm.DTMManager= 
    com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault 
4

당신은 XPathExpression에 XPath 식을 사전 컴파일해야 XPath.compile를 사용하여. 그런 다음 XPathExpression.evaluate으로 전화하십시오.

두 번 이상 실행하면 시간을 절약 할 수 있습니다. 나는 그것이 사실이라고 가정하고있다, 또는 20 ms는 중요하지 않아야한다.

편집 : 주석에 언급 된대로이 question에는 JVM 매개 변수를 포함한 추가 정보가 있습니다. 당신은 아마 내가 여기 문서화이 문제로 고통하고

+0

모든 것을 프리 컴파일 된 표현식으로 바꿨지 만 실제로는 성능이 향상되지 않습니다. 거기에 돔 또는 빠른 xPath 평가자를 구축하는 빠른 방법이 있습니까? –

+0

@Franz이기 때문에 이전에 컴파일 된 표현식을 평가하는 데 거의 20 밀리 초가 걸립니까? 어떤 구현을 사용하고 있습니까 ('getClass'가 말할 것입니다)? 이 질문 [] (http://stackoverflow.com/questions/6340802/java-xpath-apache-jaxp-implementation-performance)은 Xalan 2.7.1이 테스트 된 것 중 가장 빠르다는 것을 나타내며 최적화를위한 JVM 매개 변수를 제공합니다 . –

+0

예가 귀하의 아이디어로 업데이트됩니다. –