在我们正在开发的应用程序之一中,我们进行了大量的 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.XDocument
和 System.Xml.XPath.XPathDocument
)没有如此复杂的结构,但允许通过其他方式导航。这可能会增加 CPU 开销,但应该可以节省内存。
最后,您需要对您的案例进行分析(时间和空间),并考虑它所产生的实际(用户感知)差异有多大。
但是,为了获得最佳性能,根本不要将整个文档加载到内存中:使用 System.Xml.XmlReader
和 System.Xml.XmlWriter
并在流中做所有事情。当然,这会增加开发成本。
.NET 有一组丰富(也许太丰富)的 XML API,这对您来说是最好的(或至少是最差的)只能由您做出最适合您的权衡来确定。
我个人会避免使用 XmlDocument
并使用 XPathDocument
(尤其是阅读和使用 XPath 进行查询)或 XDocument
(尤其是创建)其中 XmlReader
/XmlWriter
没有提供足够的性能提升来证明这一点。
关于c# - Linq to XML 与 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856215/