博客
关于我
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/

你可能感兴趣的文章
原创 | 我被面试官给虐懵了,竟然是因为我不懂Spring中的@Configuration
查看>>
为什么阿里巴巴要求谨慎使用ArrayList中的subList方法
查看>>
Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?
查看>>
基于Python的Appium环境搭建合集
查看>>
Requests实践详解
查看>>
接口测试简介
查看>>
Golang Web入门(4):如何设计API
查看>>
让sublime实现js控制台(前提是安装了nodejs)
查看>>
树莓派连接二手液晶屏小记
查看>>
error: 'LOG_TAG' macro redefined
查看>>
android10Binder(一)servicemanager启动流程
查看>>
ES6基础之——new Set
查看>>
nodeJS实现识别验证码(tesseract-ocr+GraphicsMagick)
查看>>
玩玩小爬虫——试搭小架构
查看>>
AS与.net的交互——加载web上的xml
查看>>
Javascript之旅——第八站:说说instanceof踩了一个坑
查看>>
Javascript之旅——第九站:吐槽function
查看>>
Javascript之旅——第十一站:原型也不好理解?
查看>>
Sql Server之旅——第十站 看看DML操作对索引的影响
查看>>
十五天精通WCF——第二天 告别烦恼的config配置
查看>>