2009-07-20 56 views
4

Regex.Match的实例的版本我已经注意到,使用静态方法的一些代码:静态还是在C#

Regex.IsMatch([someRegexStr], [someInputStr]) 

是否值得用实例的方法代替它?像:

private readonly Regex myRegex = new Regex([someRegexStr]); 

... 

myRegex.IsMatch([someInputStr]); 

回答

5

一个在以下链接正则表达式的优化建议: Regular Expression Optimization通过Jim Mischel

有关常用的正则表达式更好的性能,构造一个正则表达式对象,并调用它的实例方法。

article包含有趣的主题,如高速缓存正则表达式和编译正则表达式以及优化建议。

2

是的,特别是如果你可以使它成为一个编译表达式。以这种方式构建Regex对象的速度较慢,但​​用于净赢的速度要快得多。

编辑:可能(可能是++)快得多。 CLI没有要求有一个很好的优化,但我会猜测微软当然是。 :d

private readonly Regex myRegex = new Regex([someRegexStr], RegexOptions.Compiled); 
+0

这可以更快,但只能用于相同的正则表达式多次使用。 – configurator 2009-07-20 20:41:31

+0

我认为它是基于它的`readonly`签名。 :) – 2009-07-20 20:49:55

3

还有就是当你调用静态Regex.IsMatch()方法发生了一些初步的处理 - 主要是为了验证你的正则表达式并将其转换成一个有限状态机表示。

如果您计划多次运行相同的正则表达式匹配,您可能更适合实例化正则表达式实例,并调用实例IsMatch()方法。您可以使用RegexOptions.Compiled标志将epxression编译为CLR字节码,这可以进一步提高性能。

相关问题