2015-08-22 3 views
1

Я решил проверить использование памяти PropertyTree для XML-анализа с помощью этого фрагмента кода. XML имеет что-то более 120M, но эта программа потребляла более 2G, когда я решил ее убить. Является ли это стандартным потреблением PropertyTree или что-то не так?Boost XML-анализатор Расход RAM

#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/xml_parser.hpp> 
#include <boost/foreach.hpp> 
#include <iostream> 

int main() 
{ 
    using boost::property_tree::ptree; 
    ptree pt; 
    read_xml("c.xml",pt); 
    return 0; 
} 
+1

У вас есть образец XML? (Без дополнительного ado: я бы предположил, что это нормально. Boost Property Tree - это не библиотека XML **. Это библиотека свойств ** **. Это означает, что она будет «достаточно хороша» для приложений с конфигурационными файлами) – sehe

+0

Образец показан здесь http://stackoverflow.com/questions/29223415/working-with-a-forest-of-binary-trees-stored-in-a-large-xml-file-php – user965748

+0

Это не 120 МБ XML. – Puppy

ответ

1

Запуск точный фрагмент кода, скомпилированного Gcc 4.8 на 64-разрядной Linux, и с помощью 117MiB input xml here, я получаю пиковое использование памяти 2.1 GiB:

enter image description here

Все это выполняется в ~ 4-14 в зависимости от флагов оптимизации. Используя tcmalloc, мы получаем 2.7s даже.

Вы можете видеть, что по меньшей мере 50% памяти находится непосредственно в контейнерах ptree. В вашем PHP-вопросе вы (вкратце) отметили, что чтение всего этого в одном DOM - это не такая уж отличная идея.

Даже, если вы используете a more appropriate/capable library, like PugiXML, исполнение составляет более 10 раз, как быстро и использование памяти составляет примерно 1/шестых:

enter image description here

Вот код:

#include <pugixml.hpp> 
#include <iostream> 

int main() { 
    pugi::xml_document doc; 
    doc.load_file("input.xml"); 
} 

Представьте что произойдет, если вы оптимизируете использование памяти с помощью потокового API.

+1

Правильно, когда я попробовал RapidXML, я получил размер 3.7 x, с PugiXML это было 2.75x. Boost не подходит для анализа XML. – user965748

Смежные вопросы