删除StringBuilder部分的有效方法

时间:2019-04-30 08:20:18

标签: vb.net stringbuilder

我有一个正则表达式,它在stringbuilder中搜索一些模式:

Dim sb as New StringBuilder(10000) 'some long string builder, filled with text
Dim matches As MatchCollection = myRegex.Matches(sb.ToString())

此外,我需要从stringbuilder中删除所有匹配项,并仅返回stringbuilder的开始,其中只有可能的文本不匹配。我知道几种方法。

1)一次删除所有其余部分:

Dim lenToRemove As Integer = sb.Length - matches(0).Index 
sb = sb.Remove(matches(0).Index, lenToRemove)

2)循环中用空字符串替换每个部分:

For Each m As Match In matches
    sb = sb.Replace(m.Value, String.Empty) 
Next

3)循环地向后拆卸每个零件:

For i As Integer = matches.Count - 1 To 0 Step -1 
    sb = sb.Remove(matches(i).Index, matches(i).Length)
Next
sb = sb.Remove(0, matches(0).Index)

此代码是数百万次迭代的某些处理的一部分。前两种方法的工作速度明显慢于第三种方法。例如,4.0000.000次迭代分别需要101、45、34秒。

我的问题是为什么第一个解决方案这么慢?可以优化此代码吗?

0 个答案:

没有答案