欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > C# 字符串拼接的 7 种方式及性能对比

C# 字符串拼接的 7 种方式及性能对比

2025/5/10 17:24:30 来源:https://blog.csdn.net/tangPHP/article/details/144545334  浏览:    关键词:C# 字符串拼接的 7 种方式及性能对比

简介

C# 提供多种字符串拼接方式,每种方式在性能和可读性上都有其特点。

方法

使用 + 号直接拼接

最简单直观的方式,用于拼接少量字符。

string str1 = "Hello";
string str2 = "World";
string result = str1 + " " + str2;
  • 优点:代码简单直观
  • 缺点:拼接大量字符串时效率较低,生成大量临时对象。

在这里插入图片描述

使用 + 号拼接字符串会生成大量临时对象的原因在于字符串在 .NET 中是 不可变的。每次进行字符串拼接时,都会创建一个新的字符串对象,而不是对原字符串进行修改。对于较少次数的拼接,这种性能影响较小;但如果拼接操作多次循环执行,内存分配和垃圾回收的开销会显著增加。

使用 .NET Profiler 工具如 dotMemory[Visual Studio Diagnostic Tools] 可以直观地观测到内存分配的情况

使用 string.Concat 方法

专门用于字符串拼接。

string result = string.Concat("Hello", " ", "World");
  • 优点:适合多个字符串的直接拼接。
  • 缺点:无格式化功能。
使用 string.Format 方法

支持格式化的拼接方式。

string name = "John";
string result = string.Format("Hello, {0}!", name);
  • 优点:可以灵活地插入变量,适合格式化字符串。
  • 缺点:相较于 $ 字符串插值略显冗长。
使用 $ 字符串插值法

C# 6.0 开始支持,是一种更加现代的格式化拼接方式。

string name = "John";
string result = $"Hello, {name}!";
  • 优点:简洁直观,可读性强。
  • 缺点:内部与 string.Format 类似,性能差异不大。
使用 StringBuilder

适合大量字符串的动态拼接。

var builder = new StringBuilder();
builder.Append("Hello");
builder.Append(" ");
builder.Append("World");
string result = builder.ToString();
  • 优点:性能优越,特别是在循环中拼接大量字符串时。
  • 缺点:需要更多代码,略微增加复杂性。

StringBuilder 的底层实现:

  • 内部使用一个动态扩展的字符数组来存储数据。
  • 默认初始容量为 16 个字符(可以通过构造函数自定义)。
  • 当字符数组容量不足时,会按一定比例自动扩展(通常是原容量的 2 倍)。

这种机制避免了频繁分配内存的开销:拼接小量数据时,内存使用非常高效;即使需要扩展缓冲区,扩展次数也远少于每次创建新字符串的情况。

使用 string.Join

用于连接数组或集合中的字符串。

string[] words = { "Hello", "World" };
string result = string.Join(" ", words);
  • 优点:简洁方便,适合处理数组或集合。
  • 缺点:需要传入分隔符,不适合普通字符串拼接。
使用 string interpolation

适用于多行或复杂格式的字符串拼接。

string name = "John";
string result = $"""
Hello,
{name}!
Welcome to C# 10.0
""";
  • 优点:支持多行字符串拼接和插值,代码更简洁。
  • 缺点:需要使用 C# 10.0 或更高版本。

性能对比

  1. 对于少量字符串拼接,+$(字符串插值)是最简单的选择。
  2. 对于大量字符串拼接,StringBuilder 更加高效。
  3. 对于集合或数组拼接,string.Join 是最佳选择。

推荐使用

  • 小规模拼接:+ 或 `$ 字符串插值。
  • 大规模拼接:StringBuilder
  • 集合拼接:string.Join

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词