字符串连接是否为链中的每个字符串在内存中分配新字符串,还是仅为要更改的字符串分配新字符串?

Met*_*uru 1 c# string stringbuilder

//will need these in a second
string a = "5";
string b = "7";
string c = "3";
Run Code Online (Sandbox Code Playgroud)

所以因为C#会在内存中分配更多的字符串

string mystring = "";
mystring += a;
mystring += b;
mystring += c;
Run Code Online (Sandbox Code Playgroud)

会慢得多

StringBuilder sb = new StringBuilder();
sb.Append(a).Append(b).Append(c);
Run Code Online (Sandbox Code Playgroud)

那么,那么:

string mystring = "";
mystring += a + b + c;
Run Code Online (Sandbox Code Playgroud)

它只是+=缓慢的部分,或者+也是罪魁祸首?

Guf*_*ffa 6

这一行:

mystring += "5" + "7" + "3";
Run Code Online (Sandbox Code Playgroud)

将实际编译为:

mystring = String.Concat(mystring, "573");
Run Code Online (Sandbox Code Playgroud)

连接文字字符串时,编译器将在编译时为您执行此操作.

如果您使用字符串变量:

string mystring = "";
string str1 = "5";
string str2 = "7";
string str3 = "3";
mystring += str1 + str2 + str3;
Run Code Online (Sandbox Code Playgroud)

最后一行将编译为:

mystring = String.Concat(myString, str1, str2, str3);
Run Code Online (Sandbox Code Playgroud)

当您将所有字符串发送到Concat方法中时,它可以一次创建结果字符串.它的作用与使用StringBuilder创建字符串非常相似.