Каковы накладные расходы памяти для boost::property_tree::ptree
Я обнаружил, что boost::property_tree::ptree имеет огромные накладные расходы памяти. Моя оценка состоит в том, что пустое дерево составляет около 150 байтов, и любая запись, помещенная в дерево, добавляет как минимум еще 150 байтов. Это делает его непригодным для нас для деревьев, содержащих тысячи записей.
Моя оценка выключена? Есть ли способ снизить накладные расходы?
1 ответ
Boost.PropertyTree по сути не является быстрым или легким парсером.
Он ориентирован на обеспечение высокого уровня удобства и функциональности, поэтому, я думаю, он не создан для того, чтобы быть эффективным.
Вы можете увидеть эту ветку в рассылке для похожих вопросов.
Я бы предположил, что альтернатива Boost.PropertyTree может быть:
- SAX-парсер - это еще один подход для разбора XML. Это как противоположность парсера DOM; он анализирует узлы XML один за другим. Обычно "выделение памяти для всего файла в начале" происходит в парсере DOM, но не происходит в парсерах SAX.
- настраиваемый распределитель анализатор + определенный пользователем пул памяти - вы можете настроить распределитель такого анализатора так, чтобы он указывал на стабильный пул памяти. Это может быть просто большой буфер предварительно выделенной памяти, пул с поддержкой фрагментации или даже файл с отображенной памятью и т. Д.