C# XML尽可能高效地查找特定元素
我正在开发一个应用程序,在这个应用程序中,我必须从几个大(3meg'ish)文件中读取一个特定的xml节点(“progress”节点) 我是通过TextReader和XDocument实现的,如下所示C# XML尽可能高效地查找特定元素,c#,.net,xml,file-io,linq-to-xml,C#,.net,Xml,File Io,Linq To Xml,我正在开发一个应用程序,在这个应用程序中,我必须从几个大(3meg'ish)文件中读取一个特定的xml节点(“progress”节点) 我是通过TextReader和XDocument实现的,如下所示 TextReader reader = null; reader = new StreamReader(Filename); XDocument objDoc = XDocument.Load(reader); var progressElement = objDoc.Root.Element(
TextReader reader = null;
reader = new StreamReader(Filename);
XDocument objDoc = XDocument.Load(reader);
var progressElement = objDoc.Root.Element("Progress");
var lastAccessTime = progressElement.Element("LastTimeAccessed").Value;
var user = progressElement.Element(("LastUserAccessed").Value;
var lastOpCode = progressElement.Element("LastOpCodeCompleted").Value;
var step = progressElement.Element("StepsCompleted").Value;
我相信XDocument会在执行任何其他操作之前将整个文件加载到内存中。但是,我不需要这样做!我知道该节点将成为文件中的第一个节点
是否有任何类型的“seek”xml解析器不首先缓存整个文件
为上面提到的属性解析10个文件需要15秒(这里的无线性很差)。是的。您可以使用SAX解析器,其工作方式与XDocument不同。基本上,SAX解析器通过输入XML工作,在回调代码处触发事件。(您编写这些回调处理程序。)主要优点
看一看如果你只想提高速度,那么XmlReader是你最好的选择。它一次读取一个节点,从一开始就开始。最大的限制是你不能回溯或使用任何对XML文档的随机访问。XmlReader会这样做吗?没有人喜欢XMLAPI,但它是streamin而不是DOM。我试图避免这种解决方案,但它看起来似乎是唯一的选择。我现在正在键入一些示例,甚至在网络文件上调用“new StreamReader”都需要1.5秒。我想无论我使用xdocument还是xmlreader,时间惩罚都会存在xdocument不是瓶颈。