代码之家  ›  专栏  ›  技术社区  ›  T. Stone

xdocument属性性能问题

  •  0
  • T. Stone  · 技术社区  · 15 年前

    我有一个加载的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是这样的,我现在可以计算表达式了。我认为这不会引起任何真正的速度问题。问题在于它自身的位置。我在搜索从1公里到10公里的任何物品。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Marc Gravell    15 年前

    你需要打电话吗 .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 即使没有设置属性,它也应该工作。当然如果你 需要 如果始终设置此属性,则在这种情况下可以接受异常。