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, iss);
                }

                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

string.format、string.connect和+=运算 效率计算,布布扣,bubuko.com

时间: 2024-11-02 01:38:22

string.format、string.connect和+=运算 效率计算的相关文章

再探Java基础——String.format(String format, Object… args)的使用

最近看到类似这样的一些代码:String.format("参数%s不能为空", "birthday"); 以前还没用过这功能不知咐意思,后研究了一下,详细讲解如下. public static String format(String format, Object... args)的功能非常强大,用法非常灵活.主要的意思是返回指定的格式化的字符串.Format参数为格式字符串语法如下: %[argument_index$][flags][width][.precis

String.format(String format, Object... args)方法详解

很多次见到同事使用这个方法,同时看到https://blog.csdn.net/qq_27298687/article/details/68921934这位仁兄写的非常仔细,我也记录一下,好加深印象. 这个是从java5的时候添加进去的方法. /** * Returns a formatted string using the specified format string and * arguments. * * <p> The locale always used is the one r

(转)使用string.Format需要注意的一个性能问题

今天,我在写C#代码时,突然发现一个最熟悉的陌生人 -- string.Format.在写C#代码的日子里,与它朝夕相伴,却没有真正去了解它.只知道在字符串比较多时,用它比用加号进行字符串连接效率更高(当然也更方便).可是却从来没有问过为什么? 在生活中也有类似的现象,与你朝夕相处.你最熟悉的人,你往往不会进一步去了解她(他),你已经习惯了她(他),你认为你已经太了解她(他)了...真的是这样吗?这值得去思考... 博问中的一个问题 -- StringBuilder,String.concat(

String.format()方法使用说明

JDK1.5开始String类中提供了一个非常有用的方法String.format(String format, Object ... args) 查看源码得知其实是调用了Java.util.Formatter.format(String, Object...)方法 [java] view plain copy print? public static String format(String format, Object ... args) { return new Formatter().f

String.format 详解

   转载 http://www.cnblogs.com/fsjohnhuang/p/4094777.html 目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六.对浮点数进行格式化     七.对日期时间进行格式化     八.其他转换符 一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s&

Java魔法堂:String.format详解

Java魔法堂:String.format详解   目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六.对浮点数进行格式化     七.对日期时间进行格式化     八.其他转换符  九.总结   参考 一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", "John&q

Java魔法堂:String.format详解 (转载)

Java魔法堂:String.format详解   目录 一.前言 二.重载方法 三.占位符 四.对字符.字符串进行格式化 五.对整数进行格式化 六.对浮点数进行格式化 七.对日期时间进行格式化 八.其他转换符   九.总结   参考 一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", "John"); ,下面将笔记整理并记录下来. 二.重载方法 /

对于字符串拼接,string.format、stringbuilder、+=

sring拼接经常会用到,拼接时候使用的方法,每个人的又不一样,有的是不知道哪个效率高,也有一些是为了方便不差那么一点时间! 今天百度查了查他们的区别! += 是效率最低的一个,尽量避免使用 stringbuilder  string.format string.format每次都是重新开辟内存空间所以如果频繁的对一个对象进行操作,还是用stringbuild好些. 总之我决定,以后尽量用stringbuider StringBuilder sb=new StringBuilder(); sb.

【转】Java魔法堂:String.format详解

Java魔法堂:String.format详解   目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六.对浮点数进行格式化     七.对日期时间进行格式化     八.其他转换符  九.总结   参考 一.前言 String.format 作为文本处理工具,为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 String.format("Hello %s", "John&q