c# - XML 尽可能高效地查找特定元素

标签 c# .net xml file-io linq-to-xml

我正在开发一个应用程序,我必须在其中读取特定的 xml 节点(“进度”节点,来自几个大的(3meg'ish)文件。

我正在通过 TextReader 和 XDocument 执行此操作,如下所示

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 会在执行任何其他操作之前将整个文件加载到内存中。但是,我不需要那个!我知道该节点将成为文件中的第一个节点。

是否有任何类型的“搜索”xml 解析器不首先缓存整个文件?

为上述属性解析 10 个文件大约需要 15 秒(这里的无线网络很糟糕)。

最佳答案

如果您只想要速度,XmlReader 是您的最佳选择。它一次读取一个节点,从头开始。最大的限制是您不能向后返回或使用对 XML 文档的任何随机访问。

关于c# - XML 尽可能高效地查找特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149586/

相关文章:

javascript - 将 JavaScript 转换为 C# - 混淆

c# - 使用继承时复制外键

c# - 获取已删除的 DataGridView 行的单元格值

.net - Entity Framework 代码优先 : One-to-One where PK is a FK

c# - 为 BackgroundWorker 设计接口(interface)

c++ - 用于 2D RPG 的 XML vs YAML vs JSON

c# - 查看加载时间超过 3 分钟

c# - WebHost 在 Asp Net Core 2.2 默认 API 模板的当前上下文中不存在

通过装饰器进行对象-XML 映射的 Python 框架?

java - simplexml android无法解析带有非结束元标记的html