2013-05-25 9 views
6

Ich habe festgestellt, dass boost :: property_tree :: ptree einen enormen Speicheraufwand hat. Meine Schätzung ist, dass ein leerer Baum etwa 150 Bytes groß ist, und jeder Eintrag, der in einen Baum gesteckt wird, fügt mindestens weitere 150 Bytes hinzu. Dies macht es für uns unbrauchbar für Bäume mit Tausenden von Einträgen.Was ist der Speicheraufwand für boost :: property_tree :: ptree

Ist meine Schätzung ausgeschaltet? Gibt es eine Möglichkeit, den Overhead gering zu halten?

Antwort

1

Boost.PropertyTree ist im Grunde kein schnell oder leichte Parser.
Es konzentriert sich auf die Bereitstellung von High-Layer-Komfort und Funktionen, so dass es nicht gebaut wird, um effizient zu sein, denke ich.

Sie könnten this thread auf Boost-Mailing-Liste für eine ähnliche Frage sehen.

Ich würde vorschlagen, dass eine Alternative von Boost.PropertyTree könnte entweder sein:

  • ein SAX-Parser - das ist ein für XML-Analyse ein anderer Ansatz ist. Es ist wie ein Gegenteil von DOM-Parser; Es analysiert XML-Knoten nacheinander. Normalerweise findet die "Speicherzuweisung für die gesamte Datei am Anfang" in einem DOM-Parser statt, bei SAX-Parsern jedoch nicht.
  • ein allocator anpassbaren Parser + Benutzer definierten Speicherpool - Sie allocator solche Parser konfigurieren könnte den stabilen Speicherpool zu zeigen. Es könnte einfach ein großer Puffer aus vorab zugeordnetem Speicher, einem Pool mit Fragmentierungsbewältigung oder sogar einer Speicherabbilddatei usw. sein.
Verwandte Themen