C# xml解析中什么更快:元素还是属性?

C# xml解析中什么更快:元素还是属性?,c#,xml,linq,benchmarking,xmlreader,C#,Xml,Linq,Benchmarking,Xmlreader,我正在编写解析XML的代码 我想知道解析什么更快:元素还是属性 这将对我的XML设计产生直接影响 请针对C#的答案以及LINQ和XmlReader之间的差异 谢谢。设计您的XML模式,使信息的表示真正有意义。通常,在属性或元素中进行选择不会影响性能 在大多数情况下,XML的性能问题与用非常详细的XML方言表示的大量数据有关。一个典型的对策是在通过网络存储或传输XML数据时压缩这些数据 如果这还不够,那么切换到另一种格式,如JSON、ASN.1或自定义二进制格式可能是最好的选择 回答问题的第二部分

我正在编写解析XML的代码

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

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

请针对C#的答案以及LINQ和XmlReader之间的差异


谢谢。

设计您的XML模式,使信息的表示真正有意义。通常,在属性或元素中进行选择不会影响性能

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

如果这还不够,那么切换到另一种格式,如JSON、ASN.1或自定义二进制格式可能是最好的选择


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

设计您的XML模式,使信息的表示真正有意义。通常,在属性或元素中进行选择不会影响性能

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

如果这还不够,那么切换到另一种格式,如JSON、ASN.1或自定义二进制格式可能是最好的选择


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

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


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

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


根据这些信息,我假设使用XML属性比只使用XML元素解析要慢。

对于XML,速度取决于许多因素

对于属性或元素,选择与数据更匹配的属性或元素。作为指导,我们使用对象的属性;和包含的子对象的元素

根据您正在谈论的使用属性的数据量,您可以节省一点xml流的大小。例如,
小于
123
这实际上不会影响解析,但会影响通过网络线发送数据或从磁盘加载数据的速度。。。如果我们谈论的是数千条这样的记录,那么它可能会对您的申请产生影响

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

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

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


关键是,您可能需要检查每种方法的优点,而不仅仅是“什么解析得更快”。对于XML,速度取决于许多因素

对于属性或元素,选择与数据更匹配的属性或元素。作为指导,我们使用对象的属性;和包含的子对象的元素

根据您正在谈论的使用属性的数据量,您可以节省一点xml流的大小。例如,
小于
123
这实际上不会影响解析,但会影响通过网络线发送数据或从磁盘加载数据的速度。。。如果我们谈论的是数千条这样的记录,那么它可能会对您的申请产生影响

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

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

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

重点是,您可能需要检查eac的优势