LINQ to XML在查询期间是否加载整个xml文档?

时间:2014-11-22 14:32:18

标签: c# xml linq

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

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

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

1 个答案:

答案 0 :(得分:3)

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