zoukankan      html  css  js  c++  java
  • String和BulidString性能比较和内在机制

     

    static void Main(string[] args)
            {
                TestString();
                TestStringBuilder();
            }
    
            public static void TestString()
            {
                DateTime startTime = DateTime.Now;
                string str = string.Empty;
                for (int i = 0; i < 10000; i++)// 一万次
                {
                    str += "a";
                }
                DateTime endTime = DateTime.Now;
                TimeSpan timeSpan = endTime - startTime;
                Console.WriteLine("String耗时:{0}",timeSpan);
    
    
            }
    
            public static void TestStringBuilder()
            {
                DateTime startTime = DateTime.Now;
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < 1000000; i++)//一百万次
                {
                    sb.Append("a");
                }
                DateTime endTime = DateTime.Now;
                TimeSpan timeSpan = endTime - startTime;
                Console.WriteLine("StringBuilder耗时:{0}",timeSpan);
                Console.ReadLine();
    
            }
    

      显示结果:

      

      原因分析:

      (1)string对象是不可变的

      string str="a";

      str=str+"b";//这句代码让人误以为str会增加长度;实际上str是创建一个新的对象,而第一个对象被丢弃,成为垃圾收集器的对象。

      (2)StringBuilder是可变的

          而StringBuilder内部有个足够长的字符串数组,当字符串长度没有超过数组长度的时候,所有的操作都是真对字符串数组的;当字符串长度足够长,它又会智能创建一个更长的字符串数组,把原来数据复制到新的数组当中。

  • 相关阅读:
    SGU 495 Kids and Prizes 概率DP 或 数学推理
    poj 2799 IP Networks 模拟 位运算
    uva 202 Repeating Decimals 模拟
    poj 3158 Kickdown 字符串匹配?
    uva 1595 Symmetry 暴力
    uva 201 Squares 暴力
    uva 1594 Ducci Sequence 哈希
    uva 1368 DNA Consensus String 字符串
    数字、字符串、列表的常用操作
    if条件判断 流程控制
  • 原文地址:https://www.cnblogs.com/jackyfei/p/StringBuilder.html
Copyright © 2011-2022 走看看