Выбор, когда использовать XmlDocument по сравнению с XmlReader

Я рассматривал и Pygame и Pyglet для маленького 2D стрелка, и после рассмотрения исходного кода, и некоторые учебные руководства пошли с Pyglet. Я был очень доволен результатами.

Pyglet сразу работал и был приятен работать с, и концептуально очень чистый. Это, конечно, сделало, чтобы Pythonic чувствовал мне: Вы могли получить простой и читаемый пример, идущий очень быстро, и он использует декораторов успешно для обработки событий. Это также не вызвало конкретную структуру программы, которая облегчила для меня смешиваться в моделировании физики Pymunk ( http://code.google.com/p/pymunk/ ).

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

Это также работает хорошо с py2exe и py2app, который важен, потому что большому количеству людей не установили интерпретатор Python.

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

кроме того, это изменилось вполне немного от предыдущих версий, таким образом, некоторые учебные руководства, которые являются, там теперь устарели (существует "модернизированный цикл событий" и класс Sprite как основные дополнения.)

я рекомендовал бы загрузить примеры (существует хороший клон Астероидов, названный включенным Astraea), и видящий, нравится ли Вам стиль.

61
задан Danny Beckett 16 June 2013 в 01:19
поделиться

3 ответа

Я обычно смотрел на это не с точки зрения максимальной скорости , а скорее с точки зрения использования памяти . Все реализации были достаточно быстрыми для сценариев использования, в которых я их использовал (типичная корпоративная интеграция).

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

XML имеет тенденцию раздуваться при загрузке в память, по крайней мере, с помощью программы чтения DOM, такой как XmlDocument или XPathDocument . Что-то вроде 10: 1? Точное количество трудно определить количественно, но, если на диске 1 МБ, это будет, например, 10 МБ памяти или больше.

Процесс, использующий любое средство чтения, которое загружает весь документ в память целиком ( XmlDocument / XPathDocument ), может пострадать от фрагментации кучи больших объектов, что в конечном итоге может привести к OutOfMemoryException s (даже с доступной памятью), приводящие к недоступности службы / процесса.

Поскольку объекты, размер которых превышает 85 КБ, попадают в кучу больших объектов, и у вас есть взрывной рост размера 10: 1 с помощью средства чтения DOM, вы можете видеть, что это не займет много времени, прежде чем ваши XML-документы будут выделяется из кучи больших объектов.

XmlDocument очень прост в использовании. Его единственный реальный недостаток заключается в том, что он загружает весь XML-документ в память для обработки. Его соблазнительно просто использовать.

69
ответ дан 24 November 2019 в 17:22
поделиться

XmlDocument - это представление всего XML-документа в памяти. Поэтому, если ваш документ большой, он будет потреблять намного больше памяти, чем если бы вы читали его с помощью XmlReader.

Это предполагает, что при использовании XmlReader вы читаете и обрабатываете элементы один за другим, а затем отбрасываете его. Если вы используете XmlReader и создаете другую промежуточную структуру в памяти, то у вас та же проблема, и вы побеждаете ее цель.

Google для " SAX vs. DOM ", чтобы узнать больше о различиях между двумя моделями обработки XML.

11
ответ дан 24 November 2019 в 17:22
поделиться

Существует порог размера, при котором XmlDocument становится медленнее и в конечном итоге становится непригодным для использования. Но фактическое значение порога будет зависеть от вашего приложения и содержимого XML, поэтому жестких правил не существует.

Если ваш XML-файл может содержать большие списки (скажем, десятки тысяч элементов), вам определенно следует использовать XmlReader.

0
ответ дан 24 November 2019 в 17:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: