我注意到一些使用静态方法的代码:
Regex.IsMatch([someRegexStr], [someInputStr])
是否值得用实例方法替换它?像:
private readonly Regex myRegex = new Regex([someRegexStr]);
...
myRegex.IsMatch([someInputStr]);
答案 0 :(得分:6)
以下链接中的正则表达式优化建议之一: Regular Expression Optimization的Jim Mischel
为了在常用正则表达式上获得更好的性能,请构造一个Regex对象并调用其实例方法。
article包含一些有趣的主题,例如缓存正则表达式和编译正则表达式以及优化建议。
答案 1 :(得分:3)
当您调用静态Regex.IsMatch()
方法时会发生一些初始处理 - 主要是为了验证您的正则表达式并将其转换为有限状态机表示。
如果您计划多次运行相同的正则表达式匹配,则最好实例化Regex实例并调用实例IsMatch()方法。您可以使用RegexOptions.Compiled
标志将epxression编译为CLR字节码,从而进一步提高性能。
答案 2 :(得分:3)
缓存从静态调用创建的最后15个正则表达式内部表示。
中讨论了这个问题和内部工作原理答案 3 :(得分:2)
是的,特别是如果你可以把它变成一个编译过的表达式。以这种方式构造Regex
对象的速度较慢,但使用它的速度要快得多。
编辑:可能(可能是++)要快得多。没有要求CLI有一个很好的优化,但我猜测微软当然是。 :d
private readonly Regex myRegex = new Regex([someRegexStr], RegexOptions.Compiled);