Насколько дорогой XSD-валидация XML? - PullRequest
3 голосов
/ 22 декабря 2011

Я хочу проверить большие XML-файлы, используя схемы xsd в C #.Для файла из 1000 строк XML-кода проверка занимает много времени.

Существуют ли какие-либо советы и рекомендации для более быстрой проверки?

Можете ли вы опубликовать несколько примеров кода, которые работают быстрее с большой проверкой XML?

Редактировать 1: я проверяю следующим образом Проверка XML с помощью XSD

Редактировать 2: Для больших файлов требуется более 10 секунд.И мне нужно, чтобы проверка была очень быстрой за секунду.

Редактировать 3: Размер файла больше 10 МБ

Редактировать 4: Я рассматриваю этот подход тожеЯ хочу сохранить XML-файл в базе данных и XSD тоже.

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

В настоящее время вы загружаете весь документ в память, что стоит независимо от проверки. Лучший вариант - просто проанализировать через ридер, то есть , как показано здесь на MSDN . Ключевые моменты из примера на этой странице:

  • никогда не загружает весь документ
  • while(reader.Reader()) просто перечисляет весь файл на уровне узла
  • проверка включена через XmlReaderSettings
2 голосов
/ 22 декабря 2011

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

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

...