2010-06-22 84 views
1

我有一个约500 MB的XML文件,我用C#使用LINQ查询该文件,但它非常慢,因为它将所有内容加载到内存中。无论如何,我可以查询该文件,而无需全部加载到内存中?LINQ如何从大型XML文件中搜索数据?

谢谢

回答

0

不,使用Linq时不可能。 Linq将全部xml的模型加载到内存中,以便您可以使用树结构进行访问。 如果你想快速访问而不加载文件到内存中,你可以使用XmlReader类。 该类为您提供了一个快速只进xml解析器,它只包含内存中的当前节点。

下面是一些帮助:http://support.microsoft.com/kb/307548

编辑:对不起,不知道其可能的XMLReader使用LINQ结合。

+0

您可以将XmlReader与LINQ结合使用:http://blogs.msdn.com/b/xmlteam/archive/2007/03/24/streaming-with-linq-to-xml-part-2.aspx – spender 2010-06-22 11:55:26

0

可以使用约XNode.ReadFrom MSDN的页面上所描述的技术产生的XNode秒的IEnumerable的(在他们提供的,XElement S中的例子)从XmlReader

注意,当您从StreamXmlReader阅读XElement,该元素的全部内容也必须进行阅读 - 所以你仍然需要自定义逻辑在IEnumerator的逻辑一点点,以确保正确的返回XElements - 例如,如果返回根元素,那么您可能会立即解析整个文档,因为根元素总是包含几乎颠倒过来的东西。 XNode.ReadFrom示例也包含这样的逻辑。

+0

sounds非常艰难。我很乐意看到有一天这样的例子。 – 2010-06-22 11:49:18

2

This article应该让你启动并运行。看看SimpleStreamAxis方法,这对于查找大型XML文件中的节点非常方便。我已经成功地在5GB XML文件上使用了这种方法的一个变体,而无需将文件加载到内存中。