【问题标题】:The most efficient way to parse Xml解析Xml最有效的方法
【发布时间】:2010-10-11 00:22:38
【问题描述】:

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


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


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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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


    现在写作是另一回事。维护 XmlDocument 很痛苦,而 XmlWriter 使用起来很轻松。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 知道与 XmlDocument 相比 XDocument 的性能如何吗?
      • 我不知道。我通常不会处理任何大到足以影响性能的数据集。
      【解决方案3】:

      最快的是XmlTextReader。来自 MSDN:

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

      更多:XmlTextReader Class

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

      【讨论】:

      • -1: XmlTextReader 不应直接使用。使用XmlReader.Create 创建一个XmlReader
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2020-08-27
      • 2018-01-17
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多