【问题标题】:Does LINQ to XML loads whole xml document during query?LINQ to XML 是否在查询期间加载整个 xml 文档?
【发布时间】:2014-11-22 14:32:17
【问题描述】:

我有一个包含数据库的大 xml 文件!
400mb 是一个大小。
它是使用LINQ 本身创建的,并且是在10 minutes 中完成的!结果很好!
但是为了使用LINQxml文件中读取粒子信息,它需要20分钟甚至更多!
试想一下,读取少量信息需要更多时间,然后写入大量信息! 在读取过程中,它需要调用不是IDisposable的函数XDocument.Load(@"C:\400mb.xml")
因此,当它加载整个 xml 文档并获取我的小信息时,内存不会清除!
我的目标是阅读“

     XDocument XD1 = XDocument.Load(@"C:\400mb.xml");
     string s1 = XD1.Root.Attribute("AnyAttribute").Value;

如您所见,我需要获取根元素的属性。
这意味着在xml 文件中,我需要的数据可能位于第一行,并且必须非常快速地完成查询!
但它不是这样加载整个文档,然后返回该信息!
所以问题是如何使用任何东西从大型xml 文件中读取少量信息?
System.Threading.Tasks 命名空间有用吗?还是创建异步操作?
或者是否有任何一种技术可以像binary 文件一样在该 xml 文件上工作?
我不知道!请帮帮我!

【问题讨论】:

标签: c# xml linq


【解决方案1】:

Xdocument.Load 不是最好的方法,原因是 Xdocument.Load 将整个文件加载到内存中。根据 MSDN memory usage will be proportional to the size of the file. 您可以使用 XMLReader(检查 here)代替,如果您只是打算搜索 XML 文档。阅读 MSDN 上的 this 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多