LINQ to XML 查询与大型 xml 字符串上的 Regex 的速度?

Xai*_*oft 1 regex linq linq-to-xml

我有以下查询:

 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)
Run Code Online (Sandbox Code Playgroud)

我最初是使用 Regex 搜索属性,但由于社区中的其他一些人告诉我这是更好的选择,我开始使用 LINQ to XML。我唯一担心的是,对于较大的 XML 字符串,LINQ to XML 查询的性能如何,它是否比 Regex 快?

我可以提高查询速度吗?

das*_*ght 5

主要问题是 regexp 从根本上说是处理 XML 文件的错误工具。欺骗正则表达式返回错误的结果太容易了,例如通过添加一个CDATA部分。到目前为止,速度是次要的问题:甚至无法通过正则表达式判断 XML 是否格式正确,更不用说正确处理极端情况了。

现在回答您的问题,速度在很大程度上取决于您的正则表达式的结构。可以构建一个文件/正则表达式组合,其中正则表达式会更快,另一对文件/正则表达式,其中 LINQ2XML 路由会更快。但是 LINQ2XML 仍然相当快,而且很可能更正确。