我有一个相当大的XML文件,需要将其解析为.NET类结构(以映射为固定长度的记录格式并通过MQ传输)。性能很重要,但不是绝对关键。

我几乎总是使用XPathNavigator来读取XML文件,因为它比XmlReader容易得多。另一方面,我知道XmlReaderXPathNavigator快,因为从理论上讲,它一次只能读取一个节点,而XPathNavigator必须读取足够的内容才能执行XPath,可能是整个文档。

我的问题是:真的快多少?读取数千个节点时,会产生明显的不同吗?我几乎必须切换到XmlReader的转折点是什么?还是对XPathNavigator进行了优化,使其始终是一个不错的选择?

我大部分的XML经验都是在相对较小的文件上进行的,因此我正在寻找处理大文件的任何人的输入。

最佳答案

据我所知,可以从Xml.Linq.XDocument或XPathDocument那里获得XPathNavigator的实现的唯一地方,这两个地方都将整个树保存在内存中。

另一方面,XmlReader可以检索和解析XML流,而无需将一组节点收集到树中。

因此,假设您以仅转发的方式收集所有必需的数据,那么对于大型数据集,XmlReader应该简单地基于以下条件执行XPathNavigator:-

  • 您将不得不反序列化XML流以填充文档和
  • 您不必将大量项目加载到内存中。
  • 09-26 00:05