2024-08-26 · C# 基础 · 学习笔记

StringBuilder 性能比较

string 在 .NET 里是不可变的,每次 + 拼接都会创建新字符串。循环里大量拼接时,StringBuilder 性能好很多,因为它内部维护可变字符数组。

自己测试过:循环拼接 10000 次字符串,用 + 是 O(n²),StringBuilder 是 O(n)。但拼接次数少的时候,插值字符串更易读,性能差异可忽略。

实践建议:1) 少量拼接用插值字符串;2) 循环里拼接用 StringBuilder;3) StringBuilder 可以链式调用 AppendLine。

代码示例

using System.Diagnostics;

// 对比测试
var sw = Stopwatch.StartNew();
string s = "";
for (int i = 0; i < 10000; i++)
{
    s += i.ToString(); // 每次都创建新字符串
}
sw.Stop();
Console.WriteLine($"+ 拼接:{sw.ElapsedMilliseconds}ms");

// StringBuilder
sw.Restart();
var sb = new StringBuilder();
for (int i = 0; i < 10000; i++)
{
    sb.Append(i); // 在原数组上追加
}
string result = sb.ToString();
sw.Stop();
Console.WriteLine("StringBuilder:" + sw.ElapsedMilliseconds + "ms");

// 链式调用
var log = new StringBuilder();
log.AppendLine("=== 日志 ===")
   .AppendLine($"时间:{DateTime.Now}")
   .Append("内容:操作成功")
   .ToString();
学习小结:以上是我学习这个知识点时的笔记和心得。技术学习没有捷径,多写多练多踩坑,自然就掌握了。如果这篇笔记对你有帮助,欢迎继续看看其他文章。