我有一个相当大的XML文件,需要将其解析为.NET类结构(以映射为固定长度的记录格式并通过MQ传输)。性能很重要,但不是绝对关键。
我几乎总是使用XPathNavigator
来读取XML文件,因为它比XmlReader
容易得多。另一方面,我知道XmlReader
比XPathNavigator
快,因为从理论上讲,它一次只能读取一个节点,而XPathNavigator
必须读取足够的内容才能执行XPath,可能是整个文档。
我的问题是:真的快多少?读取数千个节点时,会产生明显的不同吗?我几乎必须切换到XmlReader
的转折点是什么?还是对XPathNavigator
进行了优化,使其始终是一个不错的选择?
我大部分的XML经验都是在相对较小的文件上进行的,因此我正在寻找处理大文件的任何人的输入。
最佳答案
据我所知,可以从Xml.Linq.XDocument或XPathDocument那里获得XPathNavigator的实现的唯一地方,这两个地方都将整个树保存在内存中。
另一方面,XmlReader可以检索和解析XML流,而无需将一组节点收集到树中。
因此,假设您以仅转发的方式收集所有必需的数据,那么对于大型数据集,XmlReader应该简单地基于以下条件执行XPathNavigator:-