Regex.Match的实例的版本我已经注意到,使用静态方法的一些代码:静态还是在C#
Regex.IsMatch([someRegexStr], [someInputStr])
是否值得用实例的方法代替它?像:
private readonly Regex myRegex = new Regex([someRegexStr]);
...
myRegex.IsMatch([someInputStr]);
Regex.Match的实例的版本我已经注意到,使用静态方法的一些代码:静态还是在C#
Regex.IsMatch([someRegexStr], [someInputStr])
是否值得用实例的方法代替它?像:
private readonly Regex myRegex = new Regex([someRegexStr]);
...
myRegex.IsMatch([someInputStr]);
一个在以下链接正则表达式的优化建议: Regular Expression Optimization通过Jim Mischel
有关常用的正则表达式更好的性能,构造一个正则表达式对象,并调用它的实例方法。
article包含有趣的主题,如高速缓存正则表达式和编译正则表达式以及优化建议。
是的,特别是如果你可以使它成为一个编译表达式。以这种方式构建Regex
对象的速度较慢,但用于净赢的速度要快得多。
编辑:可能(可能是++)快得多。 CLI没有要求有一个很好的优化,但我会猜测微软当然是。 :d
private readonly Regex myRegex = new Regex([someRegexStr], RegexOptions.Compiled);
还有就是当你调用静态Regex.IsMatch()
方法发生了一些初步的处理 - 主要是为了验证你的正则表达式并将其转换成一个有限状态机表示。
如果您计划多次运行相同的正则表达式匹配,您可能更适合实例化正则表达式实例,并调用实例IsMatch()方法。您可以使用RegexOptions.Compiled
标志将epxression编译为CLR字节码,这可以进一步提高性能。
缓存从静态调用创建的最后15个正则表达式内部表示。
我在“How .NET Regular Expressions Really Work”中讨论这个问题和内部工作原理。
这可以更快,但只能用于相同的正则表达式多次使用。 – configurator 2009-07-20 20:41:31
我认为它是基于它的`readonly`签名。 :) – 2009-07-20 20:49:55