string s = "a" + "b";
string s1 = "b";
string s2 = "a" + s1;
上述代码的IL代码如下:
从 IL_0001:ldstr "ab" 这一行代码可以看出, 当字符串赋值用的是字面值时,C#编译器在编译的时候就已经进行了连接操作;
从s1 和 s2 的IL代码可以看出,对非字面值字符串使用 + 操作符,连接则是在运行时发生的,这会导致运行的时候,在堆上创建多个对象,而堆是需要垃圾回收的,对性能有影响.因此应该使用 StringBuilder 类型.