2014-11-22 76 views
2

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

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

正如你所看到的,我需要的根元素的属性。
这意味着,在xml文件中的数据,我需要可能是在第一线查询必须很快完成!但是
而不是这一点,加载整个文档,然后返回一个信息!
所以现在的问题是如何从一个大xml文件中使用任何读取的信息少量?
威尔System.Threading.Tasks命名空间有用吗?或者创建异步操作?
或甚至是任何类型的技术,这将在像这样的XML文件binary文件?
我不知道!请帮帮我!

+0

这是什么流为 – Jonesopolis 2014-11-22 14:46:53

+0

不是重复,但相关:http://stackoverflow.com/questions/14000846/xdocument-performance?lq=1 – nawfal 2015-08-19 10:17:01

回答

3

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