首页 新闻 搜索 专区 学院

C# string str1="str1"+1与string str1="str1"+1.ToString()

0
悬赏园豆:50 [已解决问题] 解决于 2014-09-02 12:59

1、string str1="str1"+1

2、string str1="str1"+1.ToString()

 

请问第1行与2行代码相关哪个的效率能高一些,为什么,最好详细讲解一下,多谢了!

Happy1988的主页 Happy1988 | 初学一级 | 园豆:159
提问于:2014-09-01 16:41
< >
分享
最佳答案
0

“第二种性能最高。因为指定了转换策略,所以直接调用int的ToString方法,否则会先装箱,然后调用object的ToString方法。”

从给出的汇编代码看,这种说法未必正确,而汇编代码给出的也不甚是完整,因为没有调用(call)的子程序代码.

其实他们的效率还应当与编译器、运行的系统有关。

这个问题其实很好解决,分别对他们调用n次,做个计时,一比就有了。

收获园豆:15
LiuKaiFa | 小虾三级 |园豆:1491 | 2014-09-02 03:48

string s = "aaa" + i.ToString(CultureInfo.InvariantCulture);
string s1 = "aaa" + i;

上述代码,以下为IL代码:

 IL_0003:  ldstr      "aaa"
  IL_0008:  ldloca.s   V_0
  IL_000a:  call       class [mscorlib]System.Globalization.CultureInfo [mscorlib]System.Globalization.CultureInfo::get_InvariantCulture()
  IL_000f:  call       instance string [mscorlib]System.Int32::ToString(class [mscorlib]System.IFormatProvider)
  IL_0014:  call       string [mscorlib]System.String::Concat(string,
                                                              string)
  IL_0019:  stloc.1
  IL_001a:  ldstr      "aaa"
  IL_001f:  ldloc.0
  IL_0020:  box        [mscorlib]System.Int32
  IL_0025:  call       string [mscorlib]System.String::Concat(object,
                                                              object)

 

幻天芒 | 园豆:36608 (高人七级) | 2014-09-02 09:44
其他回答(8)
0

都一样,拼接字符串时遇到别的类型默认调用ToString() 方法

龙卷风摧毁停车场! | 园豆:10 (初学一级) | 2014-09-01 16:43
0

拼接字符串时可以不用显示调用ToString()方法,效率都差不多。

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-01 16:53
1

第二种好, 第一种会装箱,转成object。 第二种 ToString不会装箱,转成string。

收获园豆:10
Qlin | 园豆:2403 (老鸟四级) | 2014-09-01 17:08
1

贪心狸猫 | 园豆:872 (小虾三级) | 2014-09-01 17:09

建议贴IL代码,哈哈~不懂汇编...

支持(0) 反对(0) 幻天芒 | 园豆:36608 (高人七级) | 2014-09-02 09:04

@幻天芒: 我也不懂.这是vs调试的时候生成的汇编.只是想告诉你 string str1="str1"+1.ToString();比string str1="str1"+1;少执行几行语句.

支持(0) 反对(0) 贪心狸猫 | 园豆:872 (小虾三级) | 2014-09-02 12:47

@贪心狸猫: 我在最后一个回答上,贴了IL代码。

支持(0) 反对(0) 幻天芒 | 园豆:36608 (高人七级) | 2014-09-02 12:53
0

效率相同吧,因为

1、string str1="str1"+1

2、string str1="str1"+1.ToString()

都是现将1转化成String类型然后相加,过程是一样。

三国郭海 | 园豆:280 (菜鸟二级) | 2014-09-01 17:10
0

整体上都差不多,但相比而言,如 @Qlin 所言,第二种性能稍高,非大量感觉不出来。

 

另外,要提高性能,可以:

1、使用format

2、使用stringbuilder

其中,使用stringbuilder性能最好,但可读性以及代码的编写量最高。

收获园豆:10
519740105 | 园豆:5810 (大侠五级) | 2014-09-01 17:12
0

一样的。

string str1="str1"+1,其实就是string str1="str1"+1.ToString()。

因为ToString()可以省略。

乐享程序员 | 园豆:930 (小虾三级) | 2014-09-01 17:14
0

从性能上来说,第二种性能最高。因为指定了转换策略,所以直接调用int的ToString方法,否则会先装箱,然后调用object的ToString方法。

对于两个字符串相加,不需要使用StringBuilder,创建对象也是需要时间的~,只有在大量字符串处理时,才需要用StringBuilder。

收获园豆:15
幻天芒 | 园豆:36608 (高人七级) | 2014-09-01 17:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册