Optimierung von DOM und XPath in Java-code
Mein code ist zu langsam, aber ich bin mir nicht sicher, wie es zu verbessern. Das Lesen von der Festplatte in den DOM-für einen 1k-Datei dauert etwa 20 ms, das mag OK sein, je nach Festplatte, aber dann hab ich noch 20 ms für die Arbeit auf einer xpath-Anweisung, die ist viel zu viel. Hier finden Sie einige Beispiel-code, der mit der Zeit Kommentare. Wie kann ich den code?
Dies geschieht bei der Konstruktion Zeit:
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = this.dbFactory.newDocumentBuilder();
XPathExpression[] ex = new XPathExpression[]{about 30 different expressions}
XPathExpression mainEx =xPath.compile("/rootElement/firstLevel/secondLevel");
Dann den code:
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
- Wahrscheinlich im Zusammenhang mit stackoverflow.com/questions/6340802/...
- Wechseln Sie zu VTD-XML< dein problem wird Weg gehen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie wahrscheinlich leiden unter diesem problem, dass ich hier dokumentiert:
Java XPath (Apache JAXP-Implementierung) Leistung
Im wesentlichen, sollten Sie diese JVM-Argumente, um stark zu beschleunigen Xalan die XPath-Implementierung:
oder
Sollten Sie pre-kompilieren Sie Ihre XPath-Ausdruck zu einer
XPathExpression
, mitXPath.compile
. Dann rufen SieXPathExpression.bewerten
.Dadurch sparen Sie Zeit, wenn Sie ausführen, es mehr als einmal. Ich gehe davon aus, dass dies der Fall ist, oder 20 ms sollte keine Rolle spielen.
EDIT: Wie erwähnt in den Kommentaren, diese Frage hat weitere Informationen, einschließlich einer JVM-parameter.
getClass
wird Ihnen sagen)? Dieses question zeigt, Xalan 2.7.1 ist der Schnellste(der getesteten) und stellt eine JVM-parameter für die Optimierung.