C#中Regex.Match的静态版本与实例版本

我注意到一些使用静态方法的代码:

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

是否值得用实例方法替换它? 喜欢:

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

以下链接中的正则表达式优化建议之一: Jim Mischel的 正则表达式优化

为了在常用的正则表达式上获得更好的性能,请构造一个Regex对象并调用其实例方法。

本文包含一些有趣的主题,例如缓存正则表达式和编译正则表达式以及优化建议。

调用静态Regex.IsMatch()方法时会发生一些初始处理 – 主要是validation正则表达式并将其转换为有限状态机表示。

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

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

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

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

缓存从静态调用创建的最后15个正则表达式内部表示。

我在谈论这个以及“ .NET正则表达式如何真正起作用”中的内部工作 。