什么是更快的xml解析:元素或属性?

时间:2010-11-22 19:14:24

标签: c# xml linq benchmarking xmlreader

我正在编写解析XML的代码。

我想知道什么是更快解析:元素或属性。

这将对我的XML设计产生直接影响。

请定位C#的答案以及LINQ和XmlReader之间的差异。

感谢。

3 个答案:

答案 0 :(得分:4)

设计XML架构,以便信息的表示实际上有意义。通常,在属性或元素中创建内容之间的决定不会影响性能。

XML的性能问题在大多数情况下与大量数据相关,这些数据以非常详细的XML方言表示。典型的对策是在通过线路存储或传输XML数据时压缩XML数据。

如果这还不够,那么可能需要切换到另一种格式,如JSON,ASN.1或自定义二进制格式。

解决问题的第二部分:XDocument(LINQ)和XmlReader类之间的主要区别在于XDocument类构建完整的文档对象模型(DOM)在内存中,这可能是一项昂贵的操作,而XmlReader类在输入文档中为您提供了一个标记化的流。

答案 1 :(得分:3)

使用XML,速度取决于很多因素。

关于属性或元素,选择一个更接近数据的元素。作为指导,我们使用对象的属性,以及对象的属性;和包含的子对象的元素。

根据您使用属性所讨论的数据量,可以节省一些xml流的大小。例如,<person id="123" />小于<person><id>123</id></person>这不会影响解析,但会影响通过网络线传输数据或从磁盘加载数据的速度......如果我们正在谈论大约数千条此类记录可能会对您的申请产生影响。

当然,如果这确实有所作为,那么使用JSON或某些二进制表示可能是更好的方法。

您需要问的第一个问题是甚至是否需要XML。如果它不需要是人类可读的,则二进制可能更好。哎呀,CSV甚至是固定宽度的文件可能会更好。

关于LINQ vs XmlReader,这将归结为您在解析数据时对数据执行的操作。您是否需要实例化一堆对象并以这种方式处理它们,或者您只是需要在流入时读取流?您甚至可能会发现只对数据进行基本的字符串操作可能是最简单/最好的方法。

重点是,您可能需要检查每种方法的优势,而不仅仅是“更快地解析”。

答案 2 :(得分:1)

没有任何硬数据证明这一点,我知道微软的WCF团队选择将DataContractSerializer作为WCF的标准。它的局限性在于它不支持XML属性,但确实比XmlSerializer快10-15%。

根据这些信息,我认为使用XML属性的解析速度比仅使用XML元素要慢。