我有一个加载的XDocument,我需要获取所有等于某个值的属性,并且是有效的某个元素。我现在的
IEnumerable<XElement> vm;
if (!cacher2.TryGetValue(name,out vm)) {
vm = project.Descendants(XName.Get(name));
cacher2.Add(name, vm);
}
XElement[] abdl = (vm.Where(a => a.Attribute(attribute).Value == ab)).ToArray();
cacher2是Dictionary<string,IEnumerable<XElement>>
ToArray是我现在可以评估表达式的。我不认为这会引起任何真正的速度问题。问题是Where本身。我正在搜索从1k到10k的任何物品。
答案 0 :(得分:1)
您需要致电.ToArray
吗?我不清楚为什么你不能只是循环添加到字典(或调用.ToDictionary
)。然而;你介绍过吗?如果此处 是瓶颈,您可以尝试回退到XmlReader
并将其视为消防:
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element
&& reader.GetAttribute("attribName") == attribValue)
{
/* do something interesting for fun and profit */
}
}
但是,使用现有代码,我很想做到这一点:
vm.Where(a => (string)a.Attribute(attribute) == ab)
不同之处在于,即使没有设置属性,它也不会调用.Value
。当然,如果您要求始终设置此属性,则在这种情况下可以接受例外。