Проблемы производительности атрибутов XDocument - PullRequest
0 голосов
/ 29 марта 2010

У меня есть загруженный 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 Ответ

1 голос
/ 29 марта 2010

Вам нужно позвонить .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, это должно работать, даже если атрибут не установлен. Конечно, если вы требуете , чтобы этот атрибут всегда был установлен, тогда в этом случае может быть допустимо исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...