首页 新闻 会员 周边 捐助

两条语句在效率上有区别么!请详细说明两条语句的执行过程!

0
悬赏园豆:100 [已解决问题] 解决于 2012-09-26 22:10

string str1 =1+1+ "";
string str2 = (1 + 1).ToString();

nyth的主页 nyth | 初学一级 | 园豆:154
提问于:2012-09-06 09:26
< >
分享
最佳答案
0

1 没必要纠结这个

2 目测第一个高。 因为第一个可以被编译器优化(release下去看, 结果应该是不一样的),

第一个结果永远不变, 因此可以直接被编译器编译成算好的结果

而第二个, 因为调用了ToString, 编译器不敢优化。 所以应该会慢一点。

 

不要太过相信“代码跑出来的时间”, 因为有可能是没开优化, 或者被其他的因素影响, 等等。

这个我一般戏称它为:测不准原理。

收获园豆:10
undefined | 小虾三级 |园豆:898 | 2012-09-21 17:42
其他回答(12)
0

感觉第2条效率高,比较符合c#的类型转换

收获园豆:10
jason2013 | 园豆:1998 (小虾三级) | 2012-09-06 09:40

这里没有任何类型转换。

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2012-09-06 09:46
0

第2条效率高,第一条的话应该是先把1+1自动toString之后又加上"",

而第二题省掉了加的部分。

收获园豆:10
lyric song | 园豆:162 (初学一级) | 2012-09-06 09:43
3

第一句有1次装箱,1+1+""(即2+"")调用了String.Concat方法,参数为object类型,因此需要将2(int类型)装箱。第二句是2.ToString()调用了System.Int32的ToString方法,没有装箱。因此第2句效率比第一句高. 经过实际测试,各运行10000次,第一句耗时4152Tick,第二句耗时2904Tick,测试环境windows8, vs2012 ultimate rtmrel, 控制台程序,realease编译。

收获园豆:10
水牛刀刀 | 园豆:6350 (大侠五级) | 2012-09-06 09:46
0

学习了...

收获园豆:10
轻狂の书生 | 园豆:1042 (小虾三级) | 2012-09-06 10:06
0

第二个的效率高

第一个的主要性能消耗在了装箱操作

收获园豆:10
田林九村 | 园豆:2367 (老鸟四级) | 2012-09-06 10:17
1

LZ,这就是区别,直观吧

收获园豆:10
在日码农 | 园豆:292 (菜鸟二级) | 2012-09-06 10:54
0

第二句高,第二句应该就是调用了int32的tostring()方法,第一句的话会自动装箱

收获园豆:10
nickycookie | 园豆:106 (初学一级) | 2012-09-06 14:55
-3

因为第一句是有拼接字符串的过程,而第二句则是直接转换字符串,少了拼接的过程自然速度快了,拼接字符串需要重新申请内存创建新字符串,这才是影响效率的地方,和装箱拆箱有毛个关系。

收获园豆:10
秦楼东 | 园豆:913 (小虾三级) | 2012-09-06 16:04
0

当然是 第二种写法高。

第一种 看着就蛋疼,既能还弄了一个空字符串,int类型还要装箱成object,再和空字符串进行连接。

收获园豆:10
Qlin | 园豆:2403 (老鸟四级) | 2012-09-06 18:03
0

第2条效率高

眯妖 | 园豆:1020 (小虾三级) | 2012-09-07 08:44
0

第二种效率高

第一种1+1要装箱后再与“”连接;

第二种直接调用int类型重载的ToString方法,无需装箱

静女 | 园豆:27 (初学一级) | 2012-09-07 13:16
0

这种问题没必要追究!!

架构师修行之路 | 园豆:322 (菜鸟二级) | 2012-09-07 15:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册