【问题标题】:LINQ to XML vs. XmlReaderLINQ to XML 与 XmlReader
【发布时间】:2010-11-12 08:59:13
【问题描述】:

在我的 Silverlight 应用程序中,我主要使用 XmlReader,但我正在尝试用 LINQ to XML 替换 XmlReader 实现。

LINQ to XML 和 Silverlight 中的 XmlReader 之间的优缺点是什么?

【问题讨论】:

  • 您有理由相信 Silverlight 的优缺点会有所不同吗?
  • 我认为 Silverlight 不会有任何固有的差异。相反,无论托管技术如何,这两种方法之间有什么区别?

标签: silverlight linq-to-xml xmlreader


【解决方案1】:

我只会在 Silverlight 中使用 LINQ to XML。

XmlReader 相对于 LINQ 的一个优势是它不在内存中构建 DOM,而是在现有流上移动。但是,只有当您可以在流到达时开始处理流而不是等待整个内容到达时,这种差异才会真正体现出来。这种优势很难实现,而且很少有用。

LINQ to XML 的查询更加直接,使用起来也更加灵活,但代价是一些额外的内存。

【讨论】:

  • Microsoft 记录了一种将 LINQ 流式传输到 XML 输入/输出的方法,而不是将整个 DOM 加载到内存中:msdn.microsoft.com/en-us/library/…
  • @Michael:看起来不错,但是我不确定在 Silverlight 中如何在 Reader 场景中使用它,我可以看到它在编写大量 xml 时非常有用。
  • 您说得对,XStreamingElement 旨在用于流式传输 xml 输出,但帮助文件中的第三个示例记录了使用 XmlReader、XElement.ReadFrom 和 c# yield 流式输入的方法。这是来自 Microsoft 的 XmlTeam 的博客文章,其中包含更多详细信息:blogs.msdn.com/b/xmlteam/archive/2007/03/24/…
  • @Michael:这也是一个不错的技术,但 Silverlight 的实现不支持ReadFrom,问题实际上是关于是否替换 XmlReader,最终对于剪切性能和最小内存占用 XmlReader 会更好。
  • 根据文档,Silverlight msdn.microsoft.com/en-us/library/… 支持 ReadFrom(XElement 继承自 XNode)。但我同意 XmlReader 比 linq to xml 方法更快并且使用更少的内存,我只是想在你的答案中添加一个小评论,提到你不必等待整个内容到达并且可以处理更小的 xml 块当它到达时。
【解决方案2】:

Linq to XML 的优点

  • 使用与以往相同的 LINQ 语法查询 XML 文档
  • 使用您习惯使用的相同 X 对象(XElement 等)

使用 XmlReader 的优点

  • 更精细地控制查询语法(XPath 而不是 LINQ)

...就我个人而言,当 LINQ to XML 第一次被引入时,我就切换到了它,并且从未回头。目前还没有发现任何显着的性能下降。

【讨论】:

  • XmlReader 不提供 XPath 支持。事实上,在 Silverlight 中没有 XPath 支持。
【解决方案3】:

LINQ to XML 更容易,但它需要在 System.XML.Linq 中引用,这会增加 Silverlight 应用程序需要加载的程序集的数量。因此,根据您的情况和您的提要,有时使用 XMLReader 很有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多