下面两种拼接方式 哪种效率高?日常开发中 你常用的又是哪种呢?
string str1 = "str1" + 9;
string str2 = "str2" + 9.ToString();
我们先看第一行代码的IL代码 我直接截图
可以看出 第一行代码的"str1" + 9在运行是 会完成一次装箱行为(IL代码中的box)
我们再看第二行代码的IL代码
而第二行代码种的9.Tostring() 并没有发生装箱行为 它实际调用的是整型的ToString()方法 ToString()的原型为
public override string ToString()
{
return Number.FormatInt32(this, (string) null, NumberFormatInfo.CurrentInfo);
}
Number.FormatInt32() 方法是一个非托管的方法 它是直接操作内存从int到string的转换 效率比装箱要高很多。
所以 在使用其他值类型到字符串的转换并完成拼接时 应避免使用"+"来完成 而要使用值类型提供的ToString()方法来完成
文章来自《编写高质量代码改善C#程序的157个建议》