String 和 StringBuilder 的相同点和不同点

相同点:

     这两个对象都是对字符串的操作,

不同点:

  String 类每次被引用时,都会重新这个字符串分配空间,而原来分配的空间还会有,如果重复操作,就会占据大量的内存空间,进而浪费内存资源,如:

  string str="一生";

     str=str+"有你";

    首先 定义了一个str变量,为"一生"这个字符串分配的物理内存空间,

  然后 str的值现在是"一生有你",在内在中也同样分配了一个物理空间来存放"一生有你",但上次在内在中分配的内存空间"一生",还占据着内存空间。

  StringBuilder 类 被实例引用时,都是对其原来的物理内存中的字符串进行操作的,不会再分配其它的物理空间,如果重复操作时,因为是对原来的

      物理空间操作,所以也就不会造成资源浪费的迹象。如:

     StringBuilder sb = new StringBuilder("一生");
     sb.Append("有你");
     Response.Write(sb);

 string 和StringBuilder 的性能比较

string str = "";
            StringBuilder sbstr= new StringBuilder();
            int times = 1000;
            int end=0, start=0;
            //测试sting 所用的时间
            for (int i = 0; i < times; i++)
            {
                str += i.ToString();
            }
            end = Environment.TickCount;
            Console.WriteLine((end - start));

            //测试stringbuilder 所用的时间
            start = Environment.TickCount;
            for (int k = 0; k < times; k++)
            {
                sbstr.Append(k.ToString());
            }
            end = Environment.TickCount;
            Console.WriteLine(end - start);
            Console.ReadKey();

运行结果:(所用的毫秒数)

str : 416670062

sbstr: 0

     通过上面的分析,可以看出用String来做字符串的连接时效率非常低,但并不是所任何情况下都要用StringBuilder,当我们连接很少的字符串时可以用String,但当做大量的或频繁的字符串连接操作时,就一定要用StringBuilder。

 

 学习中。。。。

 

posted on 2012-05-09 13:49  bin790302901  阅读(466)  评论(0编辑  收藏  举报