Падение производительности при использовании XmlReaderSettings.Schemas и указании нескольких схем для использования - PullRequest
1 голос
/ 22 февраля 2010

Я использую XmlReader для проверки XML-файла согласно предоставленной схеме.

Для этого я создаю экземпляр XmlReaderSettings и устанавливаю его ValidationType как ValidationType.Schema, а его Schemas Свойство - как XxmlSchemaSet. Черновик кода похож на

XmlReaderSettings rSettings = new XmlReaderSettings();
XmlSchemaSet schemaSet = new XmlSchemaSet();
schemaSet.Add(null, xsdPath1);
schemaSet.Add(null, xsdPath2);
schemaSet.Add(null, xsdPath3);
rSettings.Schemas.Add(schemaSet);

rSettings.ValidationType = ValidationType.Schema;

XmlReader validatingReader = XmlReader.Create(sr, rSettings);

ср StreamReader

На самом деле это устаревший код, и у меня все еще есть много проблем, которые мне нужно исправить. Я знаю, что schemaSet.Add(null, xsdPath2) выглядит отвратительно и безобразно, и я собираюсь это исправить.

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

Я думал о том, что JIT-компилятор будет компилировать только xsd1, который попытается проанализировать XML-файл и, если он потерпит неудачу, перейдет к следующему. Я не хочу, чтобы все три xsd были в памяти.

Здесь я запутался. Какое снижение производительности можно ожидать при указании нескольких файлов схемы?

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

1 Ответ

0 голосов
/ 25 февраля 2010

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

Это предотвратит повторную загрузку / перекомпиляцию схем каждый раз, когда вы хотите загрузить документ, который необходимо проверить.

Надеюсь, это поможет,

...