C# 提供了三种字符串连接的方法,分别是直接用 +、字符格式(string.format)、StringBuilder,它们的效率如何及应该在什么时候使用?下面分别一一分析。 1、何时使用 + 连接如果待连接的字符串在6个以下,可以使用 + 连接。 使用 + 连接最终会调用 String.Concat 方法,当同时连接几个字符串时,并不是每连接一个都分配一次内存,而是把几个字符都作为 String.Concat 方法的参数,只分配一次内存,如: string s = s1 + s2 + s3 + s4 + s5; 最终会被编译为:string.Concat(s1, s2, s3, s4, s5); 经测试,当待连接的字符串在6个以下时,使用 + 连接,效率略高于 StringBuilder。
2、何时使用 StringBuilder如果待连接字符串在6个以上,使用 StringBuilder 比较合适。 StringBuilder 只分配一次内存,如果第二次连接内存不足,则修改内存大小;它每次默认分配16字节,如果内存不足,则扩展到32字节,如果仍然不足,继续成倍扩展。 使用 StringBuilder 的关键是分配好内存,如果频繁的扩展内存,效率大打折扣,因为分配内存,时间开销相对比较大。如果事先能准确估计程序执行过程中所需要的内存,从而一次分配足内存,效率大大提高。如果不能准确估计,也要尽量减少内存的分配次数。 StringBuilder 使用方法如下(例如连接一条 SQL 语句): StringBuilder sb = new StringBuilder();
3、字符格式(string.format)string.format 方法,其实最终是调用 StringBuilder,原型如下: public static string Format(IFormatProvider provider, string format, params object[] args) 如果在待连接字符串比较少的情况下,并没有什么效率上的差别,在 StringBuilder 和 string.format 之间可以根据方便性或习惯自由选择。如果连接的字符串很多, StringBuilder 的效率自然要高,并且使用 string.format 也不太方便。 string.format 的使用方法如下: string userId = "yuqi"; |