C# LINQtoXML是否在查询期间加载整个XML文档?
我有一个很大的C# LINQtoXML是否在查询期间加载整个XML文档?,c#,xml,linq,C#,Xml,Linq,我有一个很大的xml文件,其中包含数据库 400mb是一个大小。 它是使用LINQ本身创建的,只需10分钟!好成绩 但要使用LINQ从xml文件中读取粒子信息,需要20分钟甚至更长时间 想象一下,阅读少量的信息比写大量的信息需要更多的时间! 在读取过程中,它需要调用一个函数XDocument.Load(@“C:\400mb.xml”),该函数不可IDisposable 因此,当它加载整个xml文档并获取我的小信息时,内存不会被清除 我的目标是阅读“ XDocument XD1 = XD
xml
文件,其中包含数据库400mb
是一个大小。它是使用
LINQ
本身创建的,只需10分钟
!好成绩但要使用
LINQ
从xml
文件中读取粒子信息,需要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
namespace有用吗?还是创建异步操作?或者,任何一种处理xml文件的技术都像
二进制文件一样吗?
我不知道!请帮帮我!Xdocument.Load
不是最好的方法,原因是Xdocument.Load将整个文件加载到内存中。根据MSDN,内存使用量将与文件大小成比例。
您可以使用XMLReader
(检查)如果您只是计划搜索XML文档,请阅读MSDN上的文档。这就是流的定义,它不是重复的,而是相关的:
XDocument XD1 = XDocument.Load(@"C:\400mb.xml");
string s1 = XD1.Root.Attribute("AnyAttribute").Value;