String.Replace(char,char)还是Replace(string,string)?

Lag*_*una 11 .net c# string performance

当我只需要用另一个字符替换一个字符时,String.Replace(char,char)和String.Replace(字符串,字符串)之间是否存在性能差异?

das*_*ght 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);
Run Code Online (Sandbox Code Playgroud)

1.466s vs 4.583s

这并不奇怪,因为字符串的重载需要一个额外的循环来遍历所有字符oldString.这个循环只运行一次,但开销仍然存在.


Jon*_*eet 5

希望 string.Replace(char, char)可能更快,因为它可以准确分配适当的空间量.我怀疑它会在许多现实世界的应用程序中产生显着的性能差异.

更重要的是,我会说它更具可读性 - 更确切地说,你最终会得到一个相同长度的字符串.