c# - Linq to XML 与 DOM

标签 c# linq dom xpath

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

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

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

谢谢, 沙米卡


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

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

谢谢。

最佳答案

使用 DOM(即 System.Xml.XmlDocument)可能会更慢,因为丰富的导航支持(所有这些引用开始加起来),并且随着节点数量的增加,这种开销将变得更加显着。

更简单的对象模型(System.Xml.Linq.XDocumentSystem.Xml.XPath.XPathDocument)没有如此复杂的结构,但允许通过其他方式导航。这可能会增加 CPU 开销,但应该可以节省内存。

最后,您需要对您的案例进行分析(时间和空间),并考虑它所产生的实际(用户感知)差异有多大。

但是,为了获得最佳性能,根本不要将整个文档加载到内存中:使用 System.Xml.XmlReaderSystem.Xml.XmlWriter并在流中做所有事情。当然,这会增加开发成本。

.NET 有一组丰富(也许太丰富)的 XML API,这对您来说是最好的(或至少是最差的)只能由您做出最适合您的权衡来确定。

我个人会避免使用 XmlDocument 并使用 XPathDocument(尤其是阅读和使用 XPath 进行查询)或 XDocument(尤其是创建)其中 XmlReader/XmlWriter 没有提供足够的性能提升来证明这一点。

关于c# - Linq to XML 与 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856215/

相关文章:

c# - Lambda 表达式和 || Entity Framework 中的运算符

linq - 基于组合框值构建动态LINQ查询

javascript - 使用 jQuery 创建 HTML 元素的最有效方法是什么?

c# - 在 WCF 服务上使用 LoaderOptimizationAttribute

c# - 当我想在我的类/方法中使用不同类型时,是否有比泛型更好的 Ant 设计解决方案

c# - 如何直接返回 ILookup(不使用 Dictionary->ILookup 转换器)

javascript - 基础 JS + WebDev 帮助

javascript - 使用 jQuery,当单击最近的单选按钮时尝试检索图像 src 值

c# - 所有复选框的单个事件处理程序

c# - VS2015 : Default Universal App template causes XAML designer crash