解析Xml最有效的方法

时间:2009-03-03 13:01:59

标签: .net xml performance linq-to-xml

.Net框架现在(至少)有四种不同的读取Xml字符串的方法。我已经使用了XmlDocument,XmlReader,XPath和XElement中的每一个,但在编码或执行期间使用哪个是最有效的?每个都是为不同的任务而设计的,有哪些优点和缺点?


更新的 使用XmlReader似乎是读取xml的最快方式,这听起来对我很合理,但有其局限性。我想知道XmlDocument和XLinq之间是否存在性能差异,以便非顺序访问xml。


更新的 我发现一些帖子比较了加载xml文档的不同方法。 XmlReader是最快的,在您加载具有10,000+节点的文档之前,XmlDocument和LINQ to XML之间没有显着差异,其中LINQ to XML出现在前面。

3 个答案:

答案 0 :(得分:13)

最常见的三种阅读方法是:

<强>的XmlDocument 它以树结构读取整个文件,然后可以使用XPath或浏览所有节点来访问它。由于整个XML结构必须加载到内存中,因此对于非常大的文件需要大量内存。非常好用且适用于较小的文件(少于几兆)。

<强>的XmlReader 快速,但也是一个真正的痛苦,因为它是顺序的。如果您需要返回,则不能,并且XML结构通常很容易出现无序的订单。此外,如果您从非结束的XML流中读取,这可能是唯一的方法。

XML序列化程序 这基本上可以为您完成所有工作,您提供模型的根对象,并为您创建和读取XML。但是,您几乎无法控制结构,阅读旧版本的对象会很痛苦。所以这对持久性不会很有效。

XDocument和LINQ to XML 正如Daniel Straight指出的那样。但我不知道评论是否足够。我邀请任何人编辑帖子并添加缺少的信息。


现在写作是另一回事。维护XmlDocument并使用XmlWriter是一件轻而易举的事。

根据我的经验,我会说最好的组合是使用XmlWriter编写并使用XmlDocument读取。

答案 1 :(得分:5)

还有XDocument和LINQ to XML,在程序员时间方面,我认为这是最有效的。

答案 2 :(得分:4)

最快的一个是XmlTextReader。来自MSDN:

  

“表示提供快速,非缓存,仅向前的读者   访问XML数据。“

更多信息:XmlTextReader Class

虽然确定哪种“方法”最适合使用,但确实取决于问题。如果您只需要读取一次XML文件(例如:阅读和缓存一些全局应用程序设置等),那么XmlTextReader就是赢家。但请记住,它只是前瞻性的读者。如果您需要搜索/修改XML,那么您应该使用XmlDocument Class