Frage zu lxml und Speicherverbrauch/-vorteil

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Donnerstag 30. April 2009, 10:19

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? ...
Gruß
Marky
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 30. April 2009, 10:52

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Donnerstag 30. April 2009, 11:09

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.
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Donnerstag 30. April 2009, 11:36

ok. Besten Dank für die Info.
Gruß
Marky
problembär

Donnerstag 30. April 2009, 13:33

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ß
Marky
User
Beiträge: 24
Registriert: Donnerstag 22. Januar 2009, 08:12

Donnerstag 30. April 2009, 13:38

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.
Gruß
Marky
Antworten