博客
关于我
StringBuilder拼接字符串,“,”在前还是在后问题
阅读量:397 次
发布时间:2019-03-06

本文共 2261 字,大约阅读时间需要 7 分钟。

在用StringBuilder拼接字符串时,经常使用分隔符,到底把分隔符放前面还是后面好呢?

我认为放前面好,因为StringBuilder在自己空间不够用的时候会成倍增加自己空间,这比较耗时。如果我把分隔符放前面,我就能在早期减少1个字符长度,如果放后面就只能最后去处理,没准就这1位就引起了它扩容。我能想象到的比较好的拼接方法如下,也请高手给出意见。

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 {     class Program     {         static void Main(string[] args)         {             List
list = new List
{ "aa", "bb", "cc" }; DateTime start = DateTime.Now; int l1 = 0, l2 = 0; for (int i = 0; i < 10000; i++) { StringBuilder sb = new StringBuilder(8);//8是估算出来的,这个长度影响性能,但也只能近似估算 foreach (var item in list) { sb.AppendFormat("{0},", item); } string a = sb.ToString(); l1 += sb.Capacity; } //输出所用时间 Console.WriteLine(l1.ToString() + "=" + (DateTime.Now - start)); start = DateTime.Now; for (int i = 0; i < 10000; i++) { StringBuilder sb2 = null; foreach (var item in list) { if (sb2 != null) { sb2.AppendFormat(",{0}", item); } else { sb2 = new StringBuilder(item, 8); } } string b2 = sb2.ToString(); l2 += sb2.Capacity; } Console.WriteLine(l2.ToString() + "=" + (DateTime.Now - start)); Console.ReadKey(); } } }

运行结果如下:

可见,就差1位也有不小的差距。

补充:最后,我测试了下,最快的方法我认为是如下所示代码:

StringBuilder sb3 = null;                 foreach (var item in list)                 {                     if (sb3 != null)                     {                         sb3.Append(",");                         sb3.Append(item);                     }                     else                     {                         sb3 = new StringBuilder(item, 8);                     }                 }

我发现,AppendFormat()明显比Append()要快,而多次调用Append(),要比再其中拼接字符串更快,但是AppendFormat()显然可读性更好一些,怎么写还是看个人喜好,毕竟当性能没有出现问题时,性能问题永远不是问题,呵呵。

转载地址:http://bzkkz.baihongyu.com/

你可能感兴趣的文章
蹒跚来迟:新版博客后台上线公测
查看>>
上周热点回顾(9.16-9.22)
查看>>
上周热点回顾(11.4-11.10)
查看>>
[网站公告]11月26日00:00-04:00阿里云RDS升级
查看>>
[网站公告]又拍云API故障造成图片无法上传(已恢复)
查看>>
上周热点回顾(12.16-12.22)
查看>>
云计算之路-阿里云上:对“黑色30秒”问题的猜想
查看>>
云计算之路-阿里云上:“黑色30秒”走了,“黑色1秒”来了,真相也许大白了
查看>>
云计算之路-阿里云上:奇怪的CPU 100%问题
查看>>
云计算之路-阿里云上:2014年6月12日12点IIS请求到达量突降
查看>>
上周热点回顾(6.9-6.15)
查看>>
上周热点回顾(6.16-6.22)
查看>>
上周热点回顾(6.23-6.29)
查看>>
上周热点回顾(10.20-10.26)
查看>>
上周热点回顾(2.16-2.22)
查看>>
上周热点回顾(3.2-3.8)
查看>>
.NET跨平台之旅:借助ASP.NET 5 Beta5的新特性显示CLR与操作系统信息
查看>>
上周热点回顾(7.27-8.2)
查看>>
上周热点回顾(9.28-10.4)
查看>>
上周热点回顾(5.2-5.8)
查看>>