Раньше я занимался синтаксическим анализом XML, но никогда в массовом порядке. Если я работаю со многими документами, похожими на этот формат:

<?xml version="1.0" ?>
<items comment="something...">
  <uid>6523453</uid>
  <uid>94593453</uid>
</items>

Каков самый быстрый способ проанализировать эти документы?
1) XML DOM
2) XML-сериализация - преобразование в объект .NET
3) Другой метод

ОБНОВЛЕНИЕ
Я забыл упомянуть, что в среднем будет около 8000 элементов uid.

4
BuddyJoe 28 Май 2009 в 03:50

3 ответа

Лучший ответ

Использование XmlReader определенно будет самым быстрым методом , хотя вам, конечно, придется делать весь синтаксический анализ вручную. Он читает напрямую из потока, ничего не кешируя, хотя его не слишком удобно использовать по сравнению с DOM.

Сравнивая два предложенных вами варианта: сериализация должна быть быстрее, чем использование DOM, поскольку (я считаю) она не кэширует все дерево в памяти - она ​​также, безусловно, имеет более простой в использовании интерфейс, если вы специально нацелены на сериализацию. .

4
Noldorin 28 Май 2009 в 03:57

Я бы сказал, что сериализация Xml будет лучшим из обоих миров. Вы получаете простоту использования, а также хорошую скорость. Есть некоторые дополнительные накладные расходы с сериализацией xml ... однако, если вы использовали XmlReader вручную, вы, по крайней мере, реплицируете, если не превзойдете, эти накладные расходы самостоятельно, поскольку вы используете этот считыватель для воссоздания графа объекта.

2
jrista 28 Май 2009 в 04:09

В зависимости от того, что вам нужно делать с данными, XmlReader, упомянутый @Noldorin, является вашим лучшим выбором для обработки стилей потоковой передачи. Если вам нужно больше специального стиля, доступ к данным с использованием XPath и XPathDocument будет намного быстрее, чем необработанный XML-документ.

http://msdn.microsoft.com/en-us/library/eh3exdc4.aspx

1
Paul Alexander 28 Май 2009 в 06:07
2
Это настоящий ответ: все зависит от обстоятельств. Это зависит от того, что вы хотите делать с данными. Если вы выполняете «XML» вещи (например, запросы XPATH, преобразования XSL и т. Д.), Вам понадобится XmlReader. Если вам нужно манипулировать данными как объектами, используйте сериализацию.
 – 
John Saunders
28 Май 2009 в 23:23