WinForm/C# C# 拼接字符串的几种方式和性能

majiye · 2017年11月06日 · 61 次阅读

C# 拼接字符串的几种方式和性能

开发过程中常用到的拼接字符串的方法有三种:

1 简单 “+=” 拼接法 

string str = "a";
str += "c" + "d";
string str_1 = "a" + "b";

首先需要明白的是 string 类型,string 是引用类型,保留在堆上,而不是栈上,用的时候传的是内存中的地址,每次修改就会重新创建一个新的 string 对象来存储字符串,原有的会被自动回收。
第一种方式的实现原理,第一步先在内存中分配空间,存储 str 变量的对象,值为"a", "+="操作时,又会重新创建一个对象来存储新的字符串("abc"),把 str 指向这个新的地址。所以只有简单几步的拼写时,一般不会有太大问题,如果有时候需要循环拼接时,就会不断创建新的对象,很浪费性能和内存。

2 String.Format()

string str= String.Format("{0}{1}{2}","a","b","c");
这就需要先看看他的源代码了,

public static String Format(IFormatProvider provider, String format, params Object[] args)
{
 if (format == null || args == null)
 throw new ArgumentNullException((format==null)?"format":"args");
 StringBuilder sb = new StringBuilder(format.Length + args.Length * 8);
 sb.AppendFormat(provider,format,args);
 return sb.ToString();
}

可以看到是先创建一个 StringBuilder 类型的变量,长度为第一个参数的长度 + 参数长度的 8 倍。.Net 自动分配一个比较大的容量来存储。StringBuilder 的介绍请看第 3 种方法.
这种方式的代码看起来比较整洁,易于阅读,效率也比 += 高效很多。

3 StringBuilder.Append

StringBuilder str=new StringBuilder();
str.Append("a");

StringBuilder 是预先创建一个比较大的内存,以后每次操作时判断容量上限是否不够用,如果不够用就自动把容量扩大一倍,修改的还是第一次创建的对象的值。

如果是简单的拼写时,可以用 "+=", string.format
循环内拼写很长的字符串时,就需要用到 StringBuilder 来节省性能和内存了。

顶楼主

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册