Seite 1 von 1

Frage zu lxml und Speicherverbrauch/-vorteil

Verfasst: Donnerstag 30. April 2009, 10:19
von Marky
Hallo zusammen,

hätte mal ein Frage akademischer Natur,

mir wird nicht deutlich, was der Unterschied/Vorteil bzgl. Speicherverbrauch bei Verwendung von lxml und der DOM-Representation einer XML-Datei ist.
D.h. wenn ich eine XML-Datei mit minidom parse, dann liegt der DOM-Baum komplett im Speicher, was ja eben auch ein Nachteil dieses Modells ist.
Bei lxml, das auf ElementTree basiert, sind das - sofern ich das korrekt verstehe - nach dem Parsen Element-Objekte als Baumstruktur, die dann von ElementTree gekapselt werden.
The ElementTree wrapper type adds code to load XML files as trees of Element objects, and save them back again.
Die liegen ja nach dem Parsen auch alle im Speicher. Mir ist da die Struktur nicht klar, die gegenüber einem DOM den Vorteil hinsichlich Speicherverbrauch bringt.

Kann das jemand mal erläutern? ...

Verfasst: Donnerstag 30. April 2009, 10:52
von Leonidas
Der Vorteil ist, dass das alles nach dem Parsen als C-Datenstruktur im Speicher liegt (eben das was libxml2 so ausgibt) und es erst bei Bedarf in Python-Objekte wrappt. Die Python-Objekte sind durch den Overhead den Python zur Objektverwaltung braucht und durch die Komfortfunktionen die Programmierer von den Objekten erwartet etwas größer.

Verfasst: Donnerstag 30. April 2009, 11:09
von BlackJack
Wahrscheinlich erzeugt `minidom` auch mehr Objekte, weil die DOM-API einiges in eigene Objekte kapselt, auf das man bei der `ElementTree`-API direkter zugreifen kann. Text-Knoten vs. einfaches Zeichenketten-Attribut zum Beispiel.

Verfasst: Donnerstag 30. April 2009, 11:36
von Marky
ok. Besten Dank für die Info.

Verfasst: Donnerstag 30. April 2009, 13:33
von problembär
Schau auch mal hier:

http://effbot.org/zone/celementtree.htm#benchmarks

Offenbar ist da viel im Umbruch. Blöd, wenn man damit arbeiten will, und dann vielleicht ein bald veraltetes Modell einsetzt.

Gruß

Verfasst: Donnerstag 30. April 2009, 13:38
von Marky
na ja, ich denke mal bei Verwendung von lxml kapselt ja diese Library den Zugriff auf den Baum. Ich denke, da muss man sich um die darunterliegende Implementierung keine Gedanken machen. Und lxml scheint mir derzeit die beste Lib zu sein.