2013-05-25 10 views
6

Ho trovato che boost :: property_tree :: ptree ha un sovraccarico di memoria enorme. La mia stima è che un ptree vuoto è di circa 150 byte e, ogni voce inserita in un ptree aggiunge almeno altri 150 byte. Ciò rende inutilizzabile per noi alberi contenenti migliaia di voci.qual è l'overhead della memoria per boost :: property_tree :: ptree

La mia stima è disattivata? C'è un modo per mantenere basso il sovraccarico?

risposta

1

Boost.PropertyTree non è fondamentalmente un veloce o leggero parser.
Si concentra sulla fornitura di funzionalità e funzionalità di alto livello, quindi non è progettato per essere efficiente, immagino.

Si potrebbe vedere this thread sulla lista di distribuzione boost per una domanda simile.

Io suggerirei che un'alternativa di Boost.PropertyTree potrebbe essere:

  • un parser SAX - questo è un altro approccio per l'analisi XML. È come un opposto del parser DOM; analizza i nodi XML uno per uno. Solitamente, la "allocazione di memoria per l'intero file all'inizio" si verifica in un parser DOM, ma non si verifica sui parser SAX.
  • an parser personalizzatore allocatore + utente definito pool di memoria - è possibile configurare l'allocatore di tale parser per puntare il pool di memoria stabile. Potrebbe semplicemente essere un ampio buffer di memoria pre-allocata, un pool che riconosce la frammentazione o anche un file mappato in memoria, ecc ...
Problemi correlati