2013-12-19 125 views
0

我有一个正则表达式可以从字符串中去除布尔条件。我执行了一些基准测试,并且我注意到运行这个正则表达式替换一个字符串1000次需要5-11秒。我对正则表现很新,但这似乎很慢。RegEx性能优化

这里是正则表达式:"\bAND\b|\bOR\b|""|\(|\)"

这是预期表现,或可我重新写我的正则表达式来改善服务表现。任何帮助将不胜感激

基准代码:

Regex booleanRegex = new Regex(@"\bAND\b|\bOR\b|""|\(|\)", 
RegexOptions.IgnoreCase | RegexOptions.Compiled); 
Stopwatch t = new Stopwatch(); 
var inputString = "AND project manager"; 
t.Start(); 
for(int i = 0; i < 1000; i++) 
{ 
    booleanRegex.Replace(inputString,""); 
} 
t.Stop(); 
var regex = t.ElapsedMilliseconds; 

regex.Dump(); 
+0

在使用之前编译它可能会有所帮助。也取决于字符串有多大 – Ben

+0

请显示您的基准代码。无论您的基准测试是错误的,还是您运行它的文本都非常长。 – dasblinkenlight

+0

您是否多次运行过您的基准测试?可能会出现一些JIT延迟。 – driis

回答

1

你可以试试这个,但我不知道,它使一个很大的区别:

[""()]|\b(?>AND|OR)\b 

在这里,我假设“()比AND和OR更频繁,我使用括号来避免评估\b两次

1

您是否使用RegexOptions.Compiled?如果不是,那应该给哟你加快速度。只要确保你只初始化正则表达式对象一次。