PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schneller XML Parser/Writer für C oder C++?


SimonX
2003-07-19, 21:38:11
Habe bis jetzt nur die libxml2 benutzt und die ist grotten langsam. Gibt es schneller Implementationen, die vollständiges XML parsen und writen können? (Schema-Checks oder Type-Checks benötige ich nicht)

libxml2 schaft mit SaX gerade mal 750 mal slashdot.xml pro Sekunde(example/slashdot.xml) in ein Speicherdokument einzulesen. (ohne output)

Ich habe jetzt eine eigene xml-lite Implementierung, die schaft auf dem gleichen Rechner mehr als 6000 dieser slashdot.xml pro Sekunde (inc. Suchstrukturen um XML elemente zu finden), aber leider unterstützt die xml-lite Implementierung nicht alle XML features (wie z.b. ' anstat " oder diese & escapes ...)

(slashdot.xml ist so 3k gross)

Gast
2003-07-20, 12:55:26
http://www.jclark.com/xml/expat.html

SimonX
2003-07-21, 00:10:23
So, habe jetzt mal den expat-1.95.6 ausprobiert.

10000 mal slashdot.xml zu parsen dauert bei expat mit leeren Elementfunktionen und ohne Ausgabe 1.882 Sekunden (Mittelwert, mehrfach wiederholt) (4500 docs/second)

10000 mal slashdot.xml in den Speicher einlesen und wieder freigeben dauert bei xml_lite ohne Ausgabe (aber mit Anlegen von Suchstrukture für die xml-elemente (weil ich das nicht ausschalten kann)) 1.015 Sekunden (auch Mittelwert)(9800 docs/second)

Das ist wohl weniger als faktor 2, aber expat hat ja nichts wirkliches getan, da ja die Elementfunktionen leer waren. Somit kommt da sicher so ein Faktor 3-5 langsamer raus, denn das teuerste ist das Duplizieren der gelesenen Daten in den Speicher.

expat ist wohl ein bischen schneller als der SAX (wenn dieser auch mit leeren Elementfunktionen aufgerufen wird), der so 4000 docs/sec (oder weniger) schaft, aber immer noch viel zu langsam für unsere Anwendungen (zur Zeit kostet das Parsen der Daten mehr Zeit als das eigentliche Processing, und das mit xml_lite. Input/Output kostet so 80%)

Es wird mir wohl nichts anderes übrig bleiben als so dieses und jenes XML-Feature in xml_lite ein zu bauen, wenn es notwendig wird.