我有这个片段,我需要优化它以便更快:
Dim lst = (From t In DocElet.ChildNodes Select ID = t.item("ID").outerxml).Distinct().ToList()
Parallel.For(0, lst.Count, Sub(i)
Dim P As XmlElement = GetElement(lst(i))
Dim ls = (From t In DocElet.ChildNodes Where t.item("ID").innerText = P.InnerText Select t)
Parallel.ForEach(ls, Sub(D)
Dim verif_date As String = D.Item("DAD").InnerText
Sej.ID = D.Item("ID").InnerText
End Sub)
End Sub)
这是Xml结构:
<?xml version="1.0" encoding="utf-8"?>
<PatientData>
<Sejour><ID></ID><DAD></DAD></Sejour>
</PatientData>
我问我如何修复我的代码,因为在列表包含20000个元素的情况下需要花费很多时间(50秒)?
答案 0 :(得分:1)
OuterXml
/ InnerText
方法可能很慢,因为它们需要遍历XML树并从所有元素构建新的XML /文本。
看起来您正在寻找某些<ID>
个节点的匹配值。如果此类节点仅包含单个值而不包含子树,请使用XmlElement.Value。
附注:使用Parallel.For
/ Parallel.ForEach
从多个线程访问XML并不能保证正常工作,因为这些类不是线程安全的。