如何/我可以使用linq到xml查询具有合理内存消耗的巨大xml文件?

Aar*_*ide 16 c# xml linq

我没有用linq来做xml,但我见过的所有例子都将整个XML文档加载到内存中.

如果XML文件是8GB,你真的没有选择怎么办?

我的第一个想法是将XElement.Load方法(TextReader)FileStream类的实例结合使用.

问题:这是否有效,这是解决搜索非常大的XML文件问题的正确方法吗?

注意:不需要高性能..我正在尝试获取linq到xml基本上完成程序的工作我可以编写循环遍历我的大文件的每一行并收集,但因为linq是"循环中心" "我希望这是可能的......

Teo*_*gul 14

使用XElement.Load将把整个文件加载到内存中.相反,如果需要,可以使用XmlReaderXNode.ReadFrom功能,您可以选择性地加载由其找到的注释XmlReader,XElement以便进一步处理.MSDN就是这样做的一个很好的例子:http://msdn.microsoft.com/en-us/library/system.xml.linq.xnode.readfrom.aspx

如果您只需要搜索xml文档,XmlReader单独就足够了,并且不会将整个文档加载到内存中.


cor*_*ttk 8

加布里埃尔,

好家伙,这是不完全回答您的实际问题(如何读取XML大文档使用LINQ),但你可能想签我的老问题,什么是分析在C-夏普大的XML文档的最佳方式.最后一个"答案"(时间)是关于实际工作的"自我说明".事实证明,混合文档-XmlReader和doclet-XmlSerializer快速(足够)且灵活.

但请注意,我处理的文档最多只有150MB.如果你真的需要处理大到8GB的文档?然后我想你可能会遇到各种各样的问题; 包括O/S的LARGE_FILE(> 2GB)处理的问题......在这种情况下,我强烈建议你尽可能保持原始......并且XmlReader尽可能原始(根据我的测试最快) )Microsoft命名空间中可用的XML解析器.

另外:我刚刚注意到我的旧线程中有一条迟来的评论,建议我查看VTD-XML ......我刚刚看了一眼......它"看起来很有前途",即使作者似乎有签约了FIGJAM的终端案例.他声称它将处理高达256GB的文档; 我回答"是的,你有没有测试过?在什么环境下?" 这听起来应该可以工作......我已经使用相同的技术在文本帮助系统中实现"超链接"; 回到HTML之前.

无论如何,祝你好运,以及你的整体项目.干杯.基思.