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