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 = ; ii < ; ii++)
{
start = DateTime.Now; for (int i = ; 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 = ; 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 = ; 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

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

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

    最近看到类似这样的一些代码:String.format("参数%s不能为空", "birthday"); 以前还没用过这功能不知咐意思,后研究了一下,详细讲解如 ...

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

    很多次见到同事使用这个方法,同时看到https://blog.csdn.net/qq_27298687/article/details/68921934这位仁兄写的非常仔细,我也记录一下,好加深印象. ...

  3. String.format(String format,Object... args)的用法

    String.format(String format, Object... args)方法详解 以前也看到过很多次这个用法,一直记不牢靠,今天整理一下.   我仅仅举几个例子稍做说明: String ...

  4. String.Format(string, arg0)中sring格式

    复合格式字符串和对象列表将用作支持复合格式设置功能的方法的参数.复合格式字符串由零个或多个固定文本段与一个或多个格式项混和组成.固定文本是所选择的任何字符串,并且每个格式项对应于列表中的一个对象或装箱 ...

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

    sring拼接经常会用到,拼接时候使用的方法,每个人的又不一样,有的是不知道哪个效率高,也有一些是为了方便不差那么一点时间! 今天百度查了查他们的区别! += 是效率最低的一个,尽量避免使用,当然,不 ...

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

    今天,我在写C#代码时,突然发现一个最熟悉的陌生人 —— string.Format.在写C#代码的日子里,与它朝夕相伴,却没有真正去了解它.只知道在字符串比较多时,用它比用加号进行字符串连接效率更高 ...

  7. C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能

    本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文 ...

  8. 【转】string.Format对C#字符串格式化

    转自:http://blog.csdn.net/samsone/article/details/7556781 1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) str ...

  9. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

随机推荐

  1. jsp实现回车登录

    <body onkeydown="if(event.keyCode==13){login()}"> 内容0...... </body> 注:body里面加上 ...

  2. JavaScript学习记录总结(五)——servlet将json数据写出去

    定义teacher和student实体 json.do   List<Student> stus=new ArrayList<Student>();        stus.a ...

  3. Solr高亮与Field权重

    Solr高亮与Field权重   Solr高亮 原理 做搜索时,高亮是很常见的需求,那么Solr肯定也为高亮提供了支持.先解释下Solr高亮的原理,在我们设置了需要高亮显示的Field之后,查询得到的 ...

  4. 来一手 AOP 注解方式进行日志记录

    系统日志对于定位/排查问题的重要性不言而喻,相信许多开发和运维都深有体会. 通过日志追踪代码运行状况,模拟系统执行情况,并迅速定位代码/部署环境问题. 系统日志同样也是数据统计/建模的重要依据,通过分 ...

  5. C++ size_t 和size_type的区别

    为了使自己的程序有很好的移植性,c++程序员应该尽量使用size_t和size_type而不是int, unsigned size_t是全局定义的类型:size_type是STL类中定义的类型属性,用 ...

  6. Android组件化框架设计与实践

    在目前移动互联网时代,每个 APP 就是流量入口,与过去 PC Web 浏览器时代不同的是,APP 的体验与迭代速度影响着用户的粘性,这同时也对从事移动开发人员提出更高要求,进而移动端框架也层出不穷. ...

  7. 图像检索(4):IF-IDF,RootSift,VLAD

    TF-IDF RootSift VLAD TF-IDF TF-IDF是一种用于信息检索的常用加权技术,在文本检索中,用以评估词语对于一个文件数据库中的其中一份文件的重要程度.词语的重要性随着它在文件中 ...

  8. spring cloud 服务A调用服务B自定义token消失,记录

    后端:spring cloud 前端:vue 场景:前端ajax请求,包装自定义请求头token到后台做验证,首先调用A服务,A服务通过Feign调用B服务发现自定义token没有传到B服务去; 原因 ...

  9. java日志及异常错误信息输出的问题

    1.异常信息可以层层传递,直到最后一层再输出日志也来得及 2.错误信息要在发生错误的当时就输出日志,否则到了其它层,很难得到准确的错误信息内容

  10. spring启动找不到spring.liveBeansView.mbeanDomain配置

    做项目时,启动tomcat报错 JNDI lookup for name [spring.liveBeansView.mbeanDomain] threw NamingException with m ...