zoukankan      html  css  js  c++  java
  • String和StringBuilder的区别

    String是固定不变的,在进行字符串连接的时候是新建一个字符串进行赋值,如果对String赋值多次,就会在内存中保存多个这个对象的副本,浪费系统资源。
    StringBuilder是可变的,不用生成中间对象,对于连接字符串操作比较多,或字符串的长度比较长时有较高的效率。
    注意:StringBuilder的内存空间不够也要扩容,如果分配的空间远远大于需要量,也会产生浪费。

    实际例子
    string s = "";
    for (int i = 0; i < 10; i++)
    {
        s += i.ToString();
    }
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10; i++)
    {
        sb.Append(i.ToString());
    }
               
    区别在于:
    第一种的for产生了:
    "0","1"..."9"(10个由i.ToString产生)
    "0","01"..."01...89"(10个由+=产生)
    总共20个字符串实例

    第二种的for产生了:
    "0","1"..."9"(10个由i.ToString产生)
    总共10个字符串实例

    当循环次数和连接的字符串长度增加时,StringBuilder越发表现出优势。
    运行程序
    static void Main(string[] args)
    {
        DateTime d1 = new DateTime();
        DateTime d2 = new DateTime();
        String s = "";
        StringBuilder sb = new StringBuilder();

        d1 = DateTime.Now;
        for (int i = 0; i <= 60000; i++)
        {
            sb.Append("AppendString123321");
        }
        d2 = DateTime.Now;
        double tt = ((TimeSpan)(d2 - d1)).TotalSeconds;
        Console.WriteLine("StringBulider消耗的时间={0}", tt);

        Console.WriteLine("程序正在执行.....");

        d1 = DateTime.Now;
        for (int i = 0; i <= 60000; i++)
        {
            s += "AppendString123321";
        }
        d2 = DateTime.Now;
        double tt2 = ((TimeSpan)(d2 - d1)).TotalSeconds;
        Console.WriteLine("String消耗的时间={0}", tt2);

        Console.WriteLine("StringBulide比String块{0}倍", tt2 / tt);
        Console.WriteLine("程序结束");
        Console.Read();
    }
    运行环境:AMD速龙双核5200+ 2.7GHz,1.75GB内存
    运行结果

  • 相关阅读:
    python 集合 set
    Meet Python
    Python 模块
    KNN
    Python Numpy包安装
    R分词
    Maximum Entropy Model(最大熵模型)初理解
    Conditional Random Fields (CRF) 初理解
    Naive Bayes (NB Model) 初识
    Hidden Markov Models(HMM) 初理解
  • 原文地址:https://www.cnblogs.com/vipcjob/p/1532745.html
Copyright © 2011-2022 走看看