zoukankan      html  css  js  c++  java
  • C# 拼接字符串的几种方式和性能

    开发过程中常用到的拼接字符串的方法有三种:

      1 简单 “+=” 拼接法

        

     string str="a";
    
     str+="c"+"d";
    
     string str_1="a"+"b";
    

      

      首先需要明白的是string类型,string是引用类型,保留在堆上,而不是栈上,用的时候传的是内存中的地址,每次修改就会重新创建一个新的string对象来存储字符串,原有的会被自动回收。

      第一种方式的实现原理,第一步先在内存中分配空间,存储str变量的对象,值为"a", “+=”时,又会重新创建一个对象来存储新的字符串(“abc"),把str指向这个新的地址。所以只有简单几步的拼写时,一般不会有太大问题,如果有时候需要循环拼接时,就会不断创建新的对象,很浪费性能和内存。

      2 String.Format()

     

     string str= String.Format("{0}{1}{2}","a","b","c");
    

      

      这就需要先看看他的源代码了,

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

      可以看到是先创建一个StringBuilder类型的变量,长度为第一个参数的长度+参数长度的8倍。.Net自动分配一个比较大的容量来存储。StringBuilder的介绍请看第3种方法.

      这种方式的代码看起来比较整洁,易于月度,效率也比+=高效很多。

    3 StringBuilder.Append

     

    StringBuilder str=new StringBuilder();
    
    str.Append("a");
    

      

       StringBuilder 是预先创建一个比较大的内存,以后每次操作时判断容量上限是否不够用,如果不够用就自动把容量扩大一倍,修改的还是第一次创建的对象的值。

    如果是简单的拼写时,可以用 "+=", string.format

    循环内拼写很长的字符串时,就需要用到StringBuilder来节省性能和内存了。 - -

      

  • 相关阅读:
    java7底层源码
    google的collection
    2017年八大顶尖的技术趋势
    【译】STM32L4x6系列用户手册第四章
    FRDM-KL43开发板驱动段式液晶SLCD的实现方法
    如何根据丝印查找相关的产品型号
    Arduino Tian开发板:一个功能强大的天气预报中心
    在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用
    为LPC1549 LPCXpresso评估板开发基于mbed的项目
    使用LPCXpresso开发板调试外部的电路板
  • 原文地址:https://www.cnblogs.com/cad2/p/4386048.html
Copyright © 2011-2022 走看看