【问题标题】:Space and Time Estimation Of XmlparsingXmlparsing的空间和时间估计
【发布时间】:2011-04-20 04:02:41
【问题描述】:

我必须开发一个函数,它将字符串(xml 字符串)作为输入并返回解析结果(以对象格式)。

我是 C# .Net 的新手,所以从网上我发现有很多方法可以做到这一点:

  1. Xml 序列化
  2. Xml 文本阅读器
  3. XmlDocument
  4. XDocument(等等)

我想知道哪种方式更好(就时间和空间而言),考虑到此函数必须每秒解析并平均 10-20 个字符串(平均 1000-2000 个字符)。

【问题讨论】:

    标签: c# .net xml parsing xml-serialization


    【解决方案1】:

    XmlTextReader 逐行遍历文件,因此它可以处理非常大的文件,并且在您不需要解析整个 xml 时非常有用。

    XmlDocument 会在加载文件时构建一个 DOM,这很容易浏览,但在大型 xml 上非常耗时\mem。

    【讨论】:

      【解决方案2】:

      对于您计划处理的数据量,您使用什么几乎无关紧要。编写工作/看起来不错的代码,而不是衡量 - 如果你每秒约 40K 的估计是合理的,你不可能发现所有方法之间有任何可衡量的差异。

      如果您可以选择 XML 的格式,XmlSerialzation 是最容易使用的并且需要最少的代码。 XmlDocument 和 XDocument 是顶级 XmlReader 上更高级别的概念,因此,如果您正在寻找最高速度的原始 XmlReader,您将获得最多的选择。

      【讨论】:

      • 所以从您的角度来看,如果我使用 XmlReader,与 XmlSerialization 相比,工作量会更多,但会比 XmlSerialization 更快?
      • @vrajs5,使用 XMLReader,您可以获得更好的内存使用率和更快的加载速度,因为其他方法都建立在它之上,但这需要付出最大的努力。从理论的角度来看,所有 XML 读取方法的速度都差不多——它们都需要读取整个 XML,从内存消耗的角度来看,XmlReader 本身并不消耗太多内存,因为它不需要在外面保存任何关于文档的知识与其他必须构建 XML 树或对象的方法不同。
      • Tnx .. 我想我必须用 XmlReader 和 XmlSerialzation 创建至少 2 种方法 .. 并检查结果...
      【解决方案3】:

      只需使用 MSXML。分析和衡量性能,然后决定您是否需要替代解决方案。

      using MSXML;
      DOMDocument30 doc = new DOMDocument30();
      doc.async = false;
      if (doc.load("somefile.xml"))
      {
        // process document here
      }
      

      一旦您有了一些具体的测量值,您就可以开始查看信息,例如在this msdn article 但你可能觉得根本没有必要。

      【讨论】:

      • 谢谢..问题是我无法创建多个解决方案并对其进行测量...我知道您所说的是衡量性能的最佳方法之一..但我想要总体思路...
      • -1 建议使用 MSXML(因为在具有 .Net 运行时的进程中不支持使用 MSXML),+1 用于提及分析和链接到有关在 .Net 世界中处理 XML 的文章。结果平衡为 0。
      猜你喜欢
      • 2018-09-12
      • 1970-01-01
      • 2011-05-25
      • 2019-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 2017-11-16
      • 1970-01-01
      相关资源
      最近更新 更多