XMLTextReader в .NET 1.1 - PullRequest
       38

XMLTextReader в .NET 1.1

0 голосов
/ 02 октября 2008

У меня есть процесс, который читает файл XML. Для этого он использует класс XMLTextReader, так как предполагается, что он является быстрым анализатором / читателем только для пересылки XML.

Отлично работает с тестовым файлом размером 1 мегабайт, но полностью останавливается при работе с 12-мегабайтным файлом в действующей системе.

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

Ответы [ 6 ]

1 голос
/ 02 октября 2008

Я был бы очень удивлен, если бы проблема была в XmlTextReader.

Если вы потратите несколько минут на написание тестовой программы, которая создает XmlTextReader и просто использует Read () для чтения каждого узла в файле, пока он не дойдет до конца документа, держу пари, вы обнаружите, что он масштабирует файл размером 12 Мб, как горячий нож сквозь масло. Это первое, что я бы попробовал, если бы столкнулся с этой проблемой.

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

1 голос
/ 02 октября 2008

SAXExpat раньше было действительно хорошо. Expat - это синтаксический анализатор XML , почти эталонная реализация. Я помню, как использовал его для чтения некоторых XML-файлов синхронизации, отправляемых по TCP-соединению, иногда действительно больших файлов (около 50 МБ) без каких-либо проблем. И это было 3/4 года назад, в .NET 1.1 и действительно дрянных компьютерах.

0 голосов
/ 08 октября 2008

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

0 голосов
/ 03 октября 2008

Только одна мысль. Вы открываете транзакцию базы данных на весь процесс? Если это так, попробуйте это без транзакции или, по крайней мере, чаще совершайте в процессе.

0 голосов
/ 02 октября 2008

Зависит от того, что вы делаете с тем, что вы получаете из читателя. Вы помещаете это в XML DOM или любую объектную модель в этом отношении? Это сделало бы большой удар памяти независимо от того, какой язык или библиотеку вы используете.

Может быть, он ошибочен в 1.1, думал о том, чтобы попробовать 2.0? Я никогда не использовал XmlTextReader в свои 1.1 дня, поэтому я не могу ручаться за него: но с 2.0 он идеален.

0 голосов
/ 02 октября 2008

У меня были подобные проблемы с производительностью в прошлом. Я проследил это до попыток удаленного разрешения в отношении DTD / схемы. Ты этим занимаешься? Попробуйте установить XmlTextReader.XmlResolver в ноль, если это возможно.

...