SLa*_*aks 19
尽管字符串操作通常会更快,但实际性能在很大程度上取决于许多因素,包括:
随着正则表达式变得更加复杂,编写具有良好性能的等效字符串操作代码将花费更多的精力和复杂性.
字符串操作将始终比正则表达式操作快。当然,除非您以低效的方式编写字符串操作。
必须解析正则表达式,并生成代码以使用字符串操作执行该操作。充其量,正则表达式操作可以执行最佳的字符串操作。
不使用正则表达式是因为它们可以比纯字符串操作更快地执行操作,而使用正则表达式是因为它可以用很少的代码来完成非常复杂的操作,并且开销也相当小。
我用两个函数做了一些基准测试,这两个函数叫做FunctionOne(字符串操作)和FunctionTwo(Regex).他们应该得到'<'和'>'之间的所有匹配.
基准#1:
基准#2:
结论:如果有效编程,字符串操作几乎总是会超过正则表达式.但是它越复杂,字符串操作就越难以保持性能问题,而且还要保持维护.
代码功能1
private void FunctionOne(string input)
{
var matches = new List<string>();
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码功能2
Regex regx = new Regex("<.*?>");
private void FunctionTwo(string input)
{
Match m = regx.Match(input);
var results = new List<string>();
while (m.Success)
{
results.Add(m.Value);
m = m.NextMatch();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11436 次 |
| 最近记录: |