如何最有效地迭代每个Match
的MatchCollection Index属性?我的代码中有很多Regex
个对象,我需要迭代所有Match
索引,但在VS分析器中我看到一个简单的Linq查询
regex.Matches(text).Cast<Match>().Select(x => x.Groups[1].Index)
和内部功能:
IEnumerator.MoveNext()
几乎占用了一半的执行时间。有没有办法对此进行硬编码?也许指针跳过内部结构或其他一些方法以避免IEnumerable<T>
?
答案 0 :(得分:2)
正如@ L.B所说,你的Linq表达受deferred execution的约束。也就是说,如果你在每一步迭代你的MatchCollection,你的Regex
将被执行以提供下一个Match
,并且这很可能是你观察到的性能损失。
事实上,Regex
非常沉重。但是,您可以进行一些调整以提高性能(请参阅Regex
best practices)。
您可能想要尝试的是应用已编译的Regex
:
Regex comp10 = new Regex(pattern, RegexOptions.Compiled);