3 .net xml performance .net-3.5
我有一个简单的结构化 XML 文件,如下所示:
<ttest ID="ttest00001", NickName="map00001"/>
<ttest ID="ttest00002", NickName="map00002"/>
<ttest ID="ttest00003", NickName="map00003"/>
<ttest ID="ttest00004", NickName="map00004"/>
Run Code Online (Sandbox Code Playgroud)
..... 这个 xml 文件大约有 2.5MB。
在我的源代码中,我将有一个循环来获取昵称
在每个循环中,我都有这样的内容:
nickNameLoopNum = MyXmlDoc.SelectSingleNode("//ttest[@ID=' + testloopNum + "']").Attributes["NickName"].Value
Run Code Online (Sandbox Code Playgroud)
这条线将花费我 30 到 40 毫秒。
我搜索了一些旧文章(可以追溯到 2002 年)说,使用某种编译的“xpath”可以帮助解决这种情况,但那是 5 年前的事了。我想知道是否有现代做法可以使其更快?(我使用的是.NET 3.5)
在 XPath 表达式中使用“ //
”缩写会导致效率低下,因为它会导致搜索整个 XML 文档。重复使用 ' //
' 会加剧这种低效率。
该问题的一种有效解决方案NickName
是通过仅评估一个 XPath 表达式来获取所有“”属性节点:
ttest/@NickName
其中上下文节点是所有“ ttest
”元素的父节点。
C# 代码如下所示:
int n = 15;
XmlDocument doc = new XmlDocument();
doc.Load("MyFile.xml");
XmlNodeList nodeList;
XmlNode top = doc.DocumentElement;
nodeList =
top.SelectNodes("ttest/@NickName");
// Get the N-th NickName, can be done in a loop for
// all n in a range
string nickName = nodeList[n].Value;
Run Code Online (Sandbox Code Playgroud)
这里我们假设“ttest”元素是 xml 文档顶部元素的子元素。
总而言之,提出了一种有效的解决方案,它仅对 XPath 表达式求值一次,并将所有结果放入方便的 IEnumerable 对象(可以用作数组)中,以便及时访问任何所需的项目O(c)
。
归档时间: |
|
查看次数: |
5937 次 |
最近记录: |