2011-02-07 2 views
0

У меня есть несколько XML-документов с кучей запросов XPath. Я хочу только приложение, которое я проектирую, чтобы изменить XML-документ :). У меня есть механизмы для проверки целостности документа и защиты от зависания.Улучшение производительности анализа XML

Теперь XML-анализ с C# .Net не дает производительности, в которой я рад.

У меня есть варианты.

  1. Использовать новый парсер (даже порт на C++).
  2. Напишите схему (это может занять много времени). Улучшает ли производительность синтаксического анализа?
  3. Играйте с большим количеством классов или библиотек .Net. XMLReader - это то, что я использую сейчас

Может кто-нибудь сказать мне, что заставит меня улыбнуться больше после того, как я потрачу.

Обновлено некоторая информация: Я хочу только разобрать и прочитать некоторые/все атрибуты. Письмо меняет документ - это не то, что я хочу. Может понадобиться поддержка XSD позже. (Донно, какое будущее будет для меня)

Текущая производительность: 50 МБ XML за 14 секунд в 1000 файлах.

Открытие, закрытие файлов также занимает некоторое время, я думаю !! (включен)

Я ищу 1/2 времени этого.

ответ

2

Ты прочитал (а) Improving XML Performance?

Не видя какого-либо кода, который показывает, что именно вы делаете, и времени трудно комментировать, что происходит медленно, но я подозреваю, что это не синтаксический анализ, который медленный.

+0

Спасибо. Я читаю его и профилирую цифры отдельно для ввода-вывода. Я приму это как ответ и закрою вопрос. Я был слишком туман. – Vignesh

+0

Обратите внимание, что статья написана в 2004 году. – Natrium

1

Не рекомендуется создавать новый парсер, если Microsoft уже определила его. Использование схемы (с XmlSerializer) значительно упрощает процесс кодирования. Кроме того, использование sgen (Generator XML Serializer) позволяет использовать creates an XML serialization assembly for types in a specified assembly in order to improve the startup performance of a XmlSerializer when it serializes or deserializes objects of the specified types.

Кроме того, вы можете использовать инструмент xsd.exe для создания схемы из XML-файла. Сгенерированная схема может быть изменена в соответствии с вашим вкусом.

Дополнительная информация

+0

Улучшает ли схема производительность? Я ничего не сериализую. Спасибо за генератор xsd. XML имеет почти 1000 тегов и атрибутов. Это беспорядок после того, как я создаю схему. Я думал об использовании [pugixml] (http://code.google.com/p/pugixml/) с оберткой – Vignesh

+0

@Vignesh. Можете ли вы опубликовать образец XML-файла? Если вы xsd, то поток: 1. Используйте xsd для генерации определения класса из схемы, 2. Используйте XmlSerializer для десериализации xml (загрузка xml в память), 3. Используйте xml-элементы. –

+1

@Vignesh, XPath - это более быстрый способ запроса XML. Но это полезно, если вы знаете местоположение информации, которую хотите запросить заранее. Но также обратите внимание, что предварительное поколение сериализатора (используя sgen) может значительно повысить производительность запуска приложения (хотя потребление памяти остается неизменным). –

0

Во-первых, интересно, если вы используете термин "XML парсера" правильно. Я прошу, потому что многие люди неправильно ссылаются на обработку, которую они выполняют в XML, после разбора (например, с использованием XSLT), как если бы это было частью анализа.

Во-вторых, какую производительность вы получаете от парсера и какую производительность вам нужно? Любое упражнение по улучшению производительности должно начинаться с этих двух чисел, и нет никаких предложений, пока мы не узнаем, насколько они отличаются.

Проверка исходного документа на схему, как правило, увеличивает время синтаксического анализа, а не уменьшает его.

+0

Я обновил некоторую информацию. Я просто разбираю его, выполняя запросы xpath. Теперь мое наблюдение TinyXML и Pugixml не поддерживают XSD, что мне может понадобиться в будущем. Я рассматриваю возможность проверки на основе XSD в будущем. – Vignesh

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