使用XmlReaderSettings.Schemas并指定要使用的多个模式时,性能会受到影响

时间:2010-02-22 06:49:46

标签: c# xml performance xsd xml-serialization

我正在使用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);

sr是StreamReader

这实际上是遗留代码,但仍有许多问题需要解决。我知道schemaSet.Add(null, xsdPath2)看起来很讨厌和丑陋,我将要修复。

我想问的是,由于我提供了三个xsd文件,我应该期待什么性能命中? xsd以优先级递减的顺序给出。所有这些XML模式都是版本化的,所以我添加了所有这些模式以便有一个回退机制。

我在想的是JIT编译器只编译xsd1尝试用它解析XML文件,如果失败则移动到下一个。我不希望所有三个xsd都在内存中。

这是我感到困惑的地方。在指定多个模式文件时,我可以获得什么样的性能?

我希望改进遗留代码库,因此性能始终处于最佳状态。

1 个答案:

答案 0 :(得分:0)

猜测模式没有太大变化,您可以考虑加载/编译模式并将其作为模式集添加到缓存中。

这样可以防止每次要加载需要验证的文档时重新加载/重新编译模式。

希望这有帮助,