Скорость запросов LINQ to XML против Regex для больших строк XML? - PullRequest
1 голос
/ 02 февраля 2012

У меня следующий запрос:

 Dim elementsWithPossibleCCNumbers As IEnumerable(Of XElement) = 
 xmlTree.Descendants().
 Where(Function(element) element.Attributes().
 Where(Function(attribute) attribute.Value.Length >= 13 
                           AndAlso attribute.Value.Length <=    
 16).
 Where(Function(attribute) Long.TryParse(attribute.Value, numeric)).Count() = 1).    
 [Select](Function(x) x)

Изначально я искал атрибуты с помощью Regex, но я начал использовать LINQ to XML, поскольку некоторые другие члены сообщества говорили мне, что это лучший путь,Меня беспокоит только то, что для больших строк XML, как производительность с LINQ to XML-запросами и быстрее ли она, чем у Regex?

Могу ли я повысить скорость запроса?

1 Ответ

4 голосов
/ 02 февраля 2012

Основная проблема заключается в том, что регулярное выражение по сути является неправильным инструментом для обработки файлов XML.Слишком легко обмануть регулярное выражение, возвращая вам неправильные результаты, например, добавив раздел CDATA.Скорость является второстепенной проблемой: невозможно даже определить, правильно ли XML сформирован с помощью регулярного выражения, не говоря уже о правильной обработке угловых случаев.

Теперь, чтобы ответить на ваш вопрос, скорость во многом зависит отструктура вашего регулярного выражения.Можно создать комбинацию файл / регулярное выражение, где регулярное выражение будет быстрее, и другую пару файл / регулярное выражение, где маршрут LINQ2XML будет быстрее.Но LINQ2XML все равно будет достаточно быстрым и, скорее всего, будет более правильным.

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