17

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


更新: 使用 XmlReader 似乎是读取 xml 的最快方法,这对我来说听起来很合理,但有其局限性。我想知道 XmlDocument 和 Xlinq 在非顺序访问 xml 方面是否存在任何性能差异。


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

4

3 回答 3

13

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

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

XmlReader 快速,但使用起来也很痛苦,因为它是顺序的。如果您需要返回,则不能,而且 XML 结构通常很容易出现杂乱无章的顺序。此外,如果您从非结束的 XML 流中读取,这可能是唯一的方法。

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

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


现在写作是另一个故事。维护 XmlDocument 很痛苦,而 XmlWriter 使用起来很容易。

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

于 2009-03-03T13:09:07.383 回答
5

还有 XDocument 和 LINQ to XML,就程序员时间而言,我认为这是迄今为止最有效的。

于 2009-03-03T13:29:09.287 回答
4

最快的是XmlTextReader. 来自 MSDN:

“表示提供对 XML 数据的快速、非缓存、只进访问的阅读器。”

更多:XmlTextReader 类

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

于 2009-03-03T13:08:01.303 回答