首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

String 與 StringBuilder 性能大比拼:不只看拼接

     編輯:關於.NET

網上比較 String 與 StringBuilder 性能的文章多聚焦字符串拼接(+= 確實不如 Append),導致許多開發者盲目濫用 StringBuilder,甚至封裝運算符替換 String。但非拼接操作下,String 未必輸。

核心差異回顧

  • String 是不可變引用類型,C# 賦值/參數傳遞語義類似值類型:s.Replace(...) 不修改原值,需重新賦值。
  • StringBuilder 可變,原地修改,無需重賦值。
  • 方法集不完全重疊,但有重疊功能(如 Replace)。

實測: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 得意地笑著。

不同操作、不同場景,性能優劣會反轉。盲目信仰某類型不可取,應根據具體用例實測,選擇最合適的工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved