XDocument属性性能问题

时间:2010-03-29 14:51:44

标签: c# .net performance caching linq-to-xml

我有一个加载的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的任何物品。

1 个答案:

答案 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。当然,如果您要求始终设置此属性,则在这种情况下可以接受例外。