C# Linq到XML与DOM

C# Linq到XML与DOM,c#,linq,dom,xpath,C#,Linq,Dom,Xpath,在我们正在开发的一个应用程序中,我们进行了大量的XML处理。目前,我们使用DOM和XPath进行大部分处理,我们对性能不太满意 目前,我们正在考虑将XML处理逻辑转移到LINQ,我们的初步调查表明LINQ的性能比DOM好得多 在做出这些改变之前,我想知道其他人对此有何看法。使用LINQ是更好的选择吗?任何缺点等 谢谢, 沙米卡 非常感谢你的回答。我做了一些性能测试,正如预期的那样,XmlReader out执行了XmlDocument和LINQ。请注意,这仅用于XML读取 另外,如果您需要LI

在我们正在开发的一个应用程序中,我们进行了大量的XML处理。目前,我们使用DOM和XPath进行大部分处理,我们对性能不太满意

目前,我们正在考虑将XML处理逻辑转移到LINQ,我们的初步调查表明LINQ的性能比DOM好得多

在做出这些改变之前,我想知道其他人对此有何看法。使用LINQ是更好的选择吗?任何缺点等

谢谢, 沙米卡


非常感谢你的回答。我做了一些性能测试,正如预期的那样,XmlReader out执行了XmlDocument和LINQ。请注意,这仅用于XML读取

另外,如果您需要LINQ的易用性,您可以通过使用XmlReader的一些特性来实现LINQXML处理,并且可以获得比XmlDocument更好的性能。有关更多信息,请参阅“rwwilden”评论


谢谢。

我认为LINQ->XML比DOM更易于使用。这对我来说更直观,也更容易阅读。

我不确定您是否会注意到使用LINQ2XML而不是DOM/XPath会有很大的性能改进。对于DOM和LINQ2XML,您迭代的文档都表示为内存中的树

如果性能确实是一个问题,并且您有相当大的XML文档,那么您可以看看框架(via)中实现的基本XML流支持。还要检查一下这个Microsoft XML团队。

由于丰富的导航支持(所有这些引用开始累积),使用DOM(ie)可能会比较慢,并且随着节点数量的增加,这种开销会变得更大

更简单的对象模型(和)没有如此复杂的结构,但允许通过其他方式进行导航。这可能会增加CPU开销,但会节省内存

最后,你需要在你的情况下对时间(空间和时间)进行配置,并且考虑它所产生的真实(用户感知)差异。 但是,为了获得最终性能,根本不要将整个文档加载到内存中:在流中使用并执行所有操作。当然,这会增加开发成本

.NET有一组丰富(可能太丰富)的XML API,这对您来说是最好的(或者至少是最坏的),只能由您做出最适合您的权衡来决定

就我个人而言,我会避免使用
XmlDocument
,而使用
XPathDocument
(特别是用于阅读和使用XPath查询)或
XDocument
(特别是用于创建)
XmlReader
/
XmlWriter
没有足够的性能提升来证明这一点。

看看这个问题: