網上比較 String 與 StringBuilder 性能的文章多聚焦字符串拼接(+= 確實不如 Append),導致許多開發者盲目濫用 StringBuilder,甚至封裝運算符替換 String。但非拼接操作下,String 未必輸。
String 是不可變引用類型,C# 賦值/參數傳遞語義類似值類型:s.Replace(...) 不修改原值,需重新賦值。StringBuilder 可變,原地修改,無需重賦值。Replace)。string str = "this is a test @param ";
var sb = new StringBuilder();
for (long i = 0; i < 1000000; i++) sb.Append(str);
string content = sb.ToString();
Stopwatch sw = Stopwatch.StartNew();
string r1 = content.Replace("@param", "哈哈");
sw.Stop();
Console.WriteLine($"String: {sw.ElapsedMilliseconds} ms");
sw.Restart();
sb.Replace("@param", "哈哈");
sw.Stop();
Console.WriteLine($"StringBuilder: {sw.ElapsedMilliseconds} ms");

String.Replace 耗時顯著少於 StringBuilder.Replace。
「並不是我什麼都比你差,你也什麼都比我好。」—— String 得意地笑著。
不同操作、不同場景,性能優劣會反轉。盲目信仰某類型不可取,應根據具體用例實測,選擇最合適的工具。