c# 字符串连接使用“+”和string.format格式化两种方式

时间:2021-09-28 09:40:35

参考文章:http://www.liangshunet.com/ca/201303/218815742.htm

字符串之间的连接常用的两种是:“+”连接、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 的关键是分配好内存,如果频繁的扩展内存,效率大打折扣,因为分配内存,时间开销相对比较大。

  如果事先能准确估计程序执行过程中所需要的内存,从而一次分配足内存,效率大大提高。如果不能准确估计,也要尽量减少内存的分配次数。

  

  3、字符格式(string.format)

  string.format 方法,其实最终是调用 StringBuilder,原型如下:

  

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

  如果在待连接字符串比较少的情况下,并没有什么效率上的差别,在 StringBuilder 和 string.format 之间可以根据方便性或习惯*选择。如果连接的字符串很多, StringBuilder 的效率自然要高,并且使用 string.format 也不太方便。

c# 字符串连接使用“+”和string.format格式化两种方式的更多相关文章

  1. java中String初始化的两种方式

    转自:http://www.diybl.com/course/3_program/java/javajs/2007104/75886.html       字符串可能是任何程序语言中都会出现的对象,j ...

  2. Java中创建String的两种方式

    1.在Java中,创建一个字符串有两种方式 String x = "abc";String y = new String("abc"); 这两种方式有什么区别呢 ...

  3. 使用printf和String.format格式化输出

    格式化输出 在哪些情况下使用格式化输出: 异常打印到日志中使用格式化输出有利于排查错误原因: printf格式化 示例: public class PrintfTest { public static ...

  4. String.Format 格式化货币的小问题

    今天在开发过程中,遇到一件让我觉得比较纳闷的事情:用String.Format 格式化充值金额的时候,我这样处理: String.Format("{0:C2}", dr[&quot ...

  5. c#基础学习(0703)之string.Format格式化日期

    C# string.Format格式化日期 DateTime dt = ,,,,,,); string.Format("{0:y yy yyy yyyy}",dt); //17 1 ...

  6. String.format()格式化日期(2)

    在以前的开发中,日期格式化一直使用的是SimpleDateFormat进行格式化.今天发现String.format也可以格式化.当 然,两种方式的优劣没有进行深入分析. 1. 日期格式化 (2018 ...

  7. Python字符串的两种方式——百分号方式,format的方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  8. 网络协议 finally{ return问题 注入问题 jdbc注册驱动问题 PreparedStatement 连接池目的 1.2.1DBCP连接池 C3P0连接池 MYSQL两种方式进行实物管理 JDBC事务 DBUtils事务 ThreadLocal 事务特性 并发访问 隔离级别

    1.1.1 API详解:注册驱动 DriverManager.registerDriver(new com.mysql.jdbc.Driver());不建议使用 原因有2个: >导致驱动被注册2 ...

  9. spring接收json字符串的两种方式

    一.前言 前几天遇到一个问题,前端H5调用我的springboot一个接口(post方式,@RequestParameter接收参数),传入的参数接收不到.自己测试接口时使用postman的form- ...

随机推荐

  1. 关于html的下载功能

    新项目基本告一段落,第一次完成前后端分离的集成,遇到的坑自然不少. 来说说第一天遇到的其中一个坑吧. ——关于下载的问题... 以前的做法,大家都喜爱用<a></a>标签吧.而 ...

  2. C&plus;&plus;因继承引发的隐藏与重写

    在区分隐藏和重写之前,先来理一理关于继承的东西... [继承] 继承是面向对象复用的重要手段.通过继承定义一个类,继承是类型之间的关系建模,共享公有的东西,实现各自本质不同的东西.简单的说,继承就是指 ...

  3. 基于Django的独立运行脚本开发

    1.在Django框架下工作时间长了,会对Django的技术设施产生依赖,比如其方便的ORM,如果写基于Django的独立运行脚本,主要在脚本前面加上以下代码: import sys,os,djang ...

  4. python学习:购物车程序

    购物车程序 product_list = [ ('mac',9000), ('kindle',800), ('tesla',900000), ('python book',105), ('bike', ...

  5. 面嚮對象程序設計第一單元作業——OO初試

    一.三次作业情况简介 第一次:本次作业仅涉及简单的常数和幂函数的加减法.要求在正确输入下给出正确的求导结果,对错误输出报错 第二次:本次作业涉及常数.幂函数和标准正余弦函数的相乘和相加减,难度较上回作 ...

  6. &lbrack;NOIp2008&rsqb; 双栈排序 &lpar;二分图染色 &plus; 贪心&rpar;

    题意 给你一个长为 \(n\) 的序列 \(p\) ,问是否能够通过对于两个栈进行 push, pop(print) 操作使得最后输出序列单调递增(即为 \(1 \cdots n\) ),如果无解输出 ...

  7. 2017-2018-2 20165237 实验四《Android开发基础》实验报告

    2017-2018-2 20165237 实验四<Android开发基础>实验报告 实验报告表头: No.1 实验要求: Android程序设计-1 实验要求: 参考<Java和An ...

  8. linq2db&period;EntityFrameworkCore 介绍

    linq2db.EntityFrameworkCore 是一个ef core的插件,对linq语法的扩展 对复杂的sql都有很好的支持,他是基于linq2db (provided by LINQ To ...

  9. Linux umask限制导致php的mkdir 0777无效

    原因:mkdir权限受当前linux umask限制 解决方法: $oldmask = umask(0); mkdir("test", 0777); umask($oldmask) ...

  10. 31、Flask实战第31天:cms后台修改密码

    cms后台修改密码界面布局 先创建cms_resetpwd.html页面,继承cms_base.html {% extends 'cms/cms_base.html' %} {% block titl ...