什么更快:正则表达式或字符串操作?

什么时候我应该使用Regex而不是字符串操作,反之亦然只考虑性能?

这取决于

虽然字符串操作通常会更快,但实际性能在很大程度上取决于许多因素,包括:

  • 你解析正则表达式的次数
  • 你编写字符串代码有多聪明
  • 正则表达式是否已预编译

随着正则表达式变得更加复杂,编写运行良好的等效字符串操作代码将花费更多的精力和复杂性。

我用两个函数做了一些基准测试,这两个函数叫做FunctionOne(字符串操作)和FunctionTwo(Regex)。 他们应该得到’<'和'>‘之间的所有匹配。

基准#1:

  • 时间称:1’000’000
  • 输入:80个字符
  • duration(字符串操作// FunctionOne):1.12秒
  • 持续时间(正则表达式操作// FunctionTwo):1.88秒

基准#2:

  • 时间称:1’000’000
  • 输入:2000个字符
  • 持续时间(字符串操作):27.69秒
  • 持续时间(正则表达式操作):41.436秒

结论:如果有效编程,字符串操作几乎总是会超过正则表达式。 但是它越复杂,字符串操作就越难以保持性能问题,而且还要保持维护。

代码function1

private void FunctionOne(string input) { var matches = new List(); var match = new StringBuilder(); Boolean startRecording = false; foreach (char c in input) { if (c.Equals('<')) { startRecording = true; continue; } if (c.Equals('>')) { matches.Add(match.ToString()); match = new StringBuilder(); startRecording = false; } if (startRecording) { match.Append(c); } } } 

代码function2

 Regex regx = new Regex("<.*?>"); private void FunctionTwo(string input) { Match m = regx.Match(input); var results = new List(); while (m.Success) { results.Add(m.Value); m = m.NextMatch(); } } 

字符串操作总是比正则表达式操作更快。 当然,除非你以低效的方式编写字符串操作。

必须解析正则表达式,并生成代码以使用字符串操作执行操作。 充其量,正则表达式操作可以做最好的字符串操作。

不使用正则表达式,因为它们可以比纯字符串操作更快地执行任何操作,因为它可以使用很少的代码执行非常复杂的操作,并且开销相当小。

我在C#中做了一些分析,比较以下内容:

1)LINQ to Objects。

2)Lambda表达式。

3)传统的迭代方法。

所有3种方法均使用和不使用正则表达式进行测试。 在我的测试用例中得出的结论清楚地表明,在大量文本中搜索字符串时,正则表达式在所有3种情况下都比非正则表达式慢很多。

您可以在我的博客上阅读详细信息: http : //www.midniteblog.com/? p = 72