zoukankan      html  css  js  c++  java
  • C# string.format、string.connect和+=运算 效率计算

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace StringFormatEfficiency
    {
        class Program
        {
            static void Main(string[] args)
            {
                string format = "my {0} is {1}";
                string name = "name";
                string zhangyaolin = "zhangyaolin";
                string my = "my ";
                string iss = " is ";
                DateTime  start = new DateTime();
                DateTime end = new DateTime();
                string aa = null;
               
                int maxcount = 10e6;
    
                for (int ii = 0; ii < 10; ii++)
                {
                    start = DateTime.Now;
    
                    for (int i = 0; i < maxcount; i++)
                    {
                        aa = string.Format(format, name, zhangyaolin);
                    }
    
                    end = DateTime.Now;
    
                    TimeSpan ts1 = end - start;
    
                    Console.WriteLine(ts1.Milliseconds.ToString());
    
                    //-------------------------
    
                    start = DateTime.Now;
    
                    for (int i = 0; i < maxcount; i++)
                    {
                        aa = string.Concat(my, name, iss, zhangyaolin);
                    }
    
                    end = DateTime.Now;
    
                    TimeSpan ts2 = end - start;
    
                    Console.WriteLine(ts2.Milliseconds.ToString());
    
                    //--------------------------
    
                    start = DateTime.Now;
    
                    for (int i = 0; i < maxcount; i++)
                    {
                        aa = my + name + iss + zhangyaolin;
                    }
    
                    end = DateTime.Now;
    
                    TimeSpan ts3 = end - start;
    
                    Console.WriteLine(ts3.Milliseconds.ToString());
    
                    Console.WriteLine("time1(format) : time2(connect) : time3(operator) =  {0} : {1} : 1", (1.0 * ts1.Milliseconds / ts3.Milliseconds).ToString(“F3”), (1.0 * ts2.Milliseconds / ts3.Milliseconds).ToString(“F3”));
                    Console.WriteLine();
    
                }
            }
        }
    }

    测试结果:

    531
    109
    125
    time1(format) : time2(connect) : time3(operator) =  4.248 : 0.872 : 1
     
    531
    109
    109
    time1(format) : time2(connect) : time3(operator) =  4.872 : 1.000 : 1
     
    515
    125
    109
    time1(format) : time2(connect) : time3(operator) =  4.725 : 1.147 : 1
     
    531
    109
    109
    time1(format) : time2(connect) : time3(operator) =  4.872 : 1.000 : 1
     
    531
    125
    109
    time1(format) : time2(connect) : time3(operator) =  4.872 : 1.147 : 1
     
    531
    109
    109
    time1(format) : time2(connect) : time3(operator) =  4.872 : 1.000 : 1
     
    531
    109
    109
    time1(format) : time2(connect) : time3(operator) =  4.872 : 1.000 : 1
     
    531
    109
    109
    time1(format) : time2(connect) : time3(operator) =  4.872 : 1.000 : 1
     
    531
    125
    109
    time1(format) : time2(connect) : time3(operator) =  4.872 : 1.147 : 1
     
    531
    109
    125
    time1(format) : time2(connect) : time3(operator) =  4.248 : 0.872 : 1 
     
     
    原因:
        string.format和string.connect都执行了新地址分配和入栈操作,不过string.format会对每个入栈字符检查判断,当有{d+}这种替换字符出现时,会将{d+}对应的字符序列入栈;而string.connect只做入栈,不做入栈字符的检查和判断。入栈操作完成时,做出栈操作,将栈内字符有序的放入堆里。理论上来说,string.format操作的字符串越长,效率越低。
    注:d+表示一个数字,如string format = "my {0} is {1}";中的0和1
  • 相关阅读:
    【剑指Offer-循环和递归】面试题10.4:矩形覆盖
    【剑指Offer-循环和递归】面试题10.3:变态跳台阶
    【剑指Offer-面试案例】面试题66:把字符串转为整数
    【剑指Offer-发散思维能力】面试题66:构建乘积数组
    【剑指Offer-发散思维能力】面试题65:不用加减乘除做加法
    【剑指Offer-发散思维能力】面试题64:求1+2+...+n
    【剑指Offer-抽象建模能力】面试题62:圆圈中最后剩下的数字
    【剑指Offer-抽象建模能力】面试题61:扑克牌中的顺子
    【剑指Offer-知识迁移能力】面试题59:滑动窗口的最大值
    【剑指Offer-知识迁移能力】面试题58.2:左旋转字符串
  • 原文地址:https://www.cnblogs.com/preacher/p/3900128.html
Copyright © 2011-2022 走看看