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

C# C中Regex.Match的静态版本与实例版本#,c#,regex,performance,C#,Regex,Performance,我注意到一些使用静态方法的代码: Regex.IsMatch([someRegexStr], [someInputStr]) 是否值得用实例方法替换它?比如: private readonly Regex myRegex = new Regex([someRegexStr]); ... myRegex.IsMatch([someInputStr]); 是的,特别是如果你能把它变成一个编译过的表达式。以这种方式构造Regex对象要慢得多,但用于净赢要快得多 编辑:可能(可能是++)快得多。

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

Regex.IsMatch([someRegexStr], [someInputStr])
是否值得用实例方法替换它?比如:

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

...

myRegex.IsMatch([someInputStr]);

是的,特别是如果你能把它变成一个编译过的表达式。以这种方式构造
Regex
对象要慢得多,但用于净赢要快得多

编辑:可能(可能是++)快得多。没有要求CLI进行良好的优化,但我想微软肯定是这样的:D

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

当您调用static
Regex.IsMatch()
方法时,会发生一些初始处理-本质上是验证正则表达式并将其转换为有限状态机表示


如果计划多次运行同一个正则表达式匹配,那么最好实例化一个正则表达式实例,并调用instance IsMatch()方法。您可以使用
RegexOptions.compiled
标志将ePxPression编译成CLR字节码,这将进一步提高性能。

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

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


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

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


我在“.”

中讨论了这一点和内部工作,这可以快得多,但只有在同一个正则表达式被多次使用的情况下才应该使用。这与此相反。这主要取决于你所做的搜索方式。