1.其一

    运行速度方面:StringBuilder > StringBuffer > String

上实例

class Program
    {
        static void Main(string[] args)
        {
            TheTestString();
        }
        /// <summary>
        /// string
        /// </summary>
        public static void TheTestString()
        {
            string str = null;
            //创建计时器   头一回见  引这个 System.Diagnostics 命名空间
            Stopwatch stopwatch = new Stopwatch();
            //计时器 START
            stopwatch.Start();
            for (int i = 0; i < 100; i++)
            {
                str += i;
            }
            //计时器 END
            stopwatch.Stop();
            //输出STR
            Console.WriteLine(str);
            //输出程序运行时间
            Console.WriteLine(stopwatch.Elapsed);
            //控制台程序闪退的坑
            Console.ReadKey();
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            //TheTestString();
            StringBuilder();
        }
        #region StringBuilder
        public static void StringBuilder()
        {
            StringBuilder stringBuilder = new StringBuilder();

            Stopwatch stopwatch = new Stopwatch();
            //计时器 START
            stopwatch.Start();
            for (int i = 0; i < 100; i++)
            {
                stringBuilder.Append(i);
            }
            //计时器 END
            stopwatch.Stop();
            //输出STR
            Console.WriteLine(stringBuilder);
            //输出程序运行时间
            Console.WriteLine(stopwatch.Elapsed);
            //控制台程序闪退的坑
            Console.ReadKey();
        }
        #endregion
    }

 

 上述两个例子只是for循环 从0 到99  博主笔记本有点卡  当数据庞大时优势就展示出了   铁证如山 ,就是有图有真相的那种 那么,

为什么会出现这种运行速度的差别,引出其二区别

 

2.其二

  数据类型

    string :乃字符串常量  引用数据类型,一旦创建即不可更改,stringbuilder:StringBuilder是一个可变的字符序列(百度百科)

    又如

1     string str=""; 
2     console.writeline(str);
3        str+="";
4        console.writeline(str);        

貌似从张变成了张三   但却为两个对象,变量名称相同但是  指向的堆中数据不同 一个指向 “张“,另一个指向 “张三“”

而反观stringbuilder以Char为单位向字符串分配空间,所以操作中不需要进行额外的内存分配

 

3.其三

  在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

  如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,

  但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线

       程的情况下,还是建议使用速度比较快的StringBuilder。(csdn)

 

ps:看一哈vs里面的监视器,今天OVER。

    

 

posted on 2018-09-20 21:55  简尚  阅读(358)  评论(3编辑  收藏  举报