2012-03-28 10 views
0

Ich verwende Saxon Java-Bibliothek, um zwei Dateien zusammenzuführen. XSLT-Datei befindet sich here.Hohe CPU-Auslastung bei Verwendung der sächsischen Bibliothek

Ich finde, dass sogar mit zwei kleinen XML-Dateien (~ 15 Knoten), CPU-Auslastung Spitzen, wenn Saxon Dateien zusammenführt. Ich habe auch versucht, Saxon für andere Anwendungsfall-modifizierende Attribute einer kleinen XML-Datei (~ 15 Knoten) zu verwenden, und ich fand dasselbe Ergebnis.

Ist XSLT im Allgemeinen eine CPU-intensive Aufgabe? oder ist es ein bekanntes Verhalten von Saxon?

Antwort

3

Ich denke, dass Oliver Becker Merge Stylesheet hat O (n^2) Leistung, das heißt, wenn Sie die Größe der Eingabe verdoppeln dauert es vier mal so lang. Das ist keine allgemeine Eigenschaft von XSLT, sondern eine Eigenschaft des von Oliver verwendeten Algorithmus. Der Code könnte wahrscheinlich viel effizienter (wenn auch immer noch quadratisch) gemacht werden, indem man die Funktion deep-equal() von XSLT 2.0 ausnutzt, aber eine radikalere Überarbeitung als diese würde den Entwurf eines anderen Algorithmus erfordern: zum Beispiel ein pre Die Verarbeitung läuft durch beide Bäume, die einen Hash-Code für jeden Knoten berechnet, so dass das nachfolgende Testen, ob zwei Bäume äquivalent sind, auf den Vergleich von zwei Hash-Codes reduziert wird.

1

IMHO XSLT ist sehr CPU-intensiv, aber für eine kleine Datei sollte es immer noch kurz sein.

Ich schlage vor, Sie schreiben einen einfachen Benchmark, um zu sehen, wie lange es dauert, eine kleine Datei zu konvertieren. Stellen Sie sicher, dass Ihre JVM aufgewärmt ist, indem Sie die Übersetzung mindestens 10.000x durchführen und testen Sie, wie lange es dauert, wenn Sie es mindestens 2 Sekunden lang wiederholt haben, nachdem es aufgewärmt ist.

Verwandte Themen