1、string str1="str1"+1
2、string str1="str1"+1.ToString()
请问第1行与2行代码相关哪个的效率能高一些,为什么,最好详细讲解一下,多谢了!
“第二种性能最高。因为指定了转换策略,所以直接调用int的ToString方法,否则会先装箱,然后调用object的ToString方法。”
从给出的汇编代码看,这种说法未必正确,而汇编代码给出的也不甚是完整,因为没有调用(call)的子程序代码.
其实他们的效率还应当与编译器、运行的系统有关。
这个问题其实很好解决,分别对他们调用n次,做个计时,一比就有了。
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)
都一样,拼接字符串时遇到别的类型默认调用ToString() 方法
拼接字符串时可以不用显示调用ToString()方法,效率都差不多。
第二种好, 第一种会装箱,转成object。 第二种 ToString不会装箱,转成string。
建议贴IL代码,哈哈~不懂汇编...
@幻天芒: 我也不懂.这是vs调试的时候生成的汇编.只是想告诉你 string str1="str1"+1.ToString();比string str1="str1"+1;少执行几行语句.
@贪心狸猫: 我在最后一个回答上,贴了IL代码。
效率相同吧,因为
1、string str1="str1"+1
2、string str1="str1"+1.ToString()
都是现将1转化成String类型然后相加,过程是一样。
整体上都差不多,但相比而言,如 @Qlin 所言,第二种性能稍高,非大量感觉不出来。
另外,要提高性能,可以:
1、使用format
2、使用stringbuilder
其中,使用stringbuilder性能最好,但可读性以及代码的编写量最高。
一样的。
string str1="str1"+1,其实就是string str1="str1"+1.ToString()。
因为ToString()可以省略。
从性能上来说,第二种性能最高。因为指定了转换策略,所以直接调用int的ToString方法,否则会先装箱,然后调用object的ToString方法。
对于两个字符串相加,不需要使用StringBuilder,创建对象也是需要时间的~,只有在大量字符串处理时,才需要用StringBuilder。