当我只需要将一个字符替换为另一个字符时,String.Replace(char,char)和String.Replace(字符串,字符串)之间是否存在性能差异?
答案 0 :(得分:10)
是的,有:我做了一个快速实验,看起来字符串版本慢了大约3倍。
string a = "quickbrownfoxjumpsoverthelazydog";
DateTime t1 = DateTime.Now;
for (int i = 0; i != 10000000; i++) {
var b = a.Replace('o', 'b');
if (b.Length == 0) {
break;
}
}
DateTime t2 = DateTime.Now;
for (int i = 0; i != 10000000; i++) {
var b = a.Replace("o", "b");
if (b.Length == 0) {
break;
}
}
DateTime te = DateTime.Now;
Console.WriteLine("{0} {1}", t2-t1, te-t2);
1.466s vs 4.583s
这并不奇怪,因为带字符串的重载需要一个额外的循环来遍历oldString
的所有字符。这个循环只运行一次,但开销仍然存在。
答案 1 :(得分:5)
我希望期望 string.Replace(char, char)
可能更快,因为它可以分配恰当的空间量。我怀疑它会在许多现实世界的应用程序中产生显着的性能差异。
更重要的是,我会说它更具可读性 - 更清楚的是你最终会得到一个相同长度的字符串。
答案 2 :(得分:3)
String.Replace(char, char)
更快。原因很简单:
StringBuilder
进行替换ABCACABCAC
这样的字符串,你想要替换ABC
。你需要找出3个字符是否匹配,当使用字符时你只需找到一个字符。