Здраствуйте,
имеется странная штука: парсинг 9 Мб XML файла DOM парсерами Qt и xerces-c приводит к отжиранию примерно 80 Мб памяти, можете ли Вы подсказать другие DOM парсеры с предположительно меньшими затратами памяти (желательно раз в 5-10) или единственный выход — переход на SAX?
Здравствуйте, 17dufa, Вы писали:
1>Здраствуйте, 1>имеется странная штука: парсинг 9 Мб XML файла DOM парсерами Qt и xerces-c приводит к отжиранию примерно 80 Мб памяти, можете ли Вы подсказать другие DOM парсеры с предположительно меньшими затратами памяти (желательно раз в 5-10) или единственный выход — переход на SAX?
В смысле, "в 10 раз" ? Вы хотите загрузить 9МБ текста в DOM и потратить на это 8МБ ???
Если нужно только что-то поискать в xml-нике, то нужен парсер, который строит DOM только по факту обращения к элементам.
Если нужно прошерстить весь xml, то SAX.
Имею скафандр — готов путешествовать!
Re[2]: DOM XML
От:
Аноним
Дата:
17.01.08 08:28
Оценка:
Здравствуйте, rus blood, Вы писали:
RB>В смысле, "в 10 раз" ? Вы хотите загрузить 9МБ текста в DOM и потратить на это 8МБ ???
RB>Если нужно только что-то поискать в xml-нике, то нужен парсер, который строит DOM только по факту обращения к элементам. RB>Если нужно прошерстить весь xml, то SAX.
Ну если в 10 раз нельзя, то хотя б в 5 Какой DOM парсер можете посоветовать с реализацией описанной функциональности?
Прошерстить весь — не надо. Грубо говоря на этом этапе обработке нужен доступ к одному полю, но к сожалению договорится о кодировке не удалось, так что придется смотреть заголовок и тп, что делать ручками совершенно не хотца. Вообще — необходимое поле лежит почти в самом начале, так что если есть возможность прервать анализ, то запуск SAX кажется наилучшим решением.
Здравствуйте, 17dufa, Вы писали:
1>Здраствуйте, 1>имеется странная штука: парсинг 9 Мб XML файла DOM парсерами Qt и xerces-c приводит к отжиранию примерно 80 Мб памяти, можете ли Вы подсказать другие DOM парсеры с предположительно меньшими затратами памяти (желательно раз в 5-10) или единственный выход — переход на SAX?
Если все так критично, то я бы воспользовался SAX-ом. DOM, на мой взгляд, нужен в том случае, если тебе прямо всю его структуру нужно хранить. А если просто вычитать какую-то инфу (например инициализацию) — то лучше SAX.
17dufa wrote:
> Здраствуйте, > имеется странная штука: парсинг 9 Мб XML файла DOM парсерами Qt и > xerces-c приводит к отжиранию примерно 80 Мб памяти, можете ли Вы > подсказать другие DOM парсеры с предположительно меньшими затратами > памяти (желательно раз в 5-10) или единственный выход — переход на SAX?
Поэкспериментируй с libxml2. Он, например, умеет словарь имён тегов использовать. Т.е. если у тебя 10000 тегов с именем "veryLongTagName" то вместо 16 байт на каждое имя будет 4 байта на указатель в словаре.
Но лучше, конечно, SAX.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: DOM XML
От:
Аноним
Дата:
18.01.08 08:53
Оценка:
Здравствуйте, Аноним, Вы писали:
видимо отжирание памяти в 10кратном размере исходника это стандартная болезнь. Тот же перловый XML::Simple ест примерно столько же, на наших 30Мб xml-ках по 400Мб памяти
Здравствуйте, rus blood, Вы писали:
RB>В смысле, "в 10 раз" ? Вы хотите загрузить 9МБ текста в DOM и потратить на это 8МБ ???
Лично я — хочу. Чтобы 5000 раз повторяющиеся имена тэгов и атрибутов типа <DataTableEntry> были записаны в словарь, и DOM ссылался на них по числовым индексам.
Здравствуйте, 17dufa, Вы писали:
1>Здраствуйте, 1>имеется странная штука: парсинг 9 Мб XML файла DOM парсерами Qt и xerces-c приводит к отжиранию примерно 80 Мб памяти, можете ли Вы подсказать другие DOM парсеры с предположительно меньшими затратами памяти (желательно раз в 5-10) или единственный выход — переход на SAX?
посмотрите на мой парсер правда он не чистый дом и не чистый сакс. но память не жрет.