当我只需要用另一个字符替换一个字符时,使用String.Replace(char, char)和String.Replace(string, string)有性能差异吗?
是的,有一个结论:我进行了一项快速实验,结果看起来使用字符串版本大约慢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.466秒与4.583秒
这并不令人意外,因为使用字符串的负载需要额外循环遍历oldString
的所有字符。这个循环只运行一次,但开销仍然存在。
string.Replace(char, char)
可能更快,因为它可以精确地分配所需的空间。不过在许多实际的应用程序中,这可能不会产生显著的性能差异。String.Replace(char, char)
更快。原因很简单:
StringBuilder
进行替换。ABCACABCAC
,你想要替换ABC
,当使用字符时,你只需要找到一个字符。