从减少装箱次数出发提升代码性能

测试tostring是否装箱的代码
结论tostring方法并不发生装箱,可利用此减少装箱次数,进而减少内存分配次数,降低GC工作量,最终提升代码性能

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace boxing
{
    class Program
    {
        static void Main(string[] args)
        {
            //testboxing
            Console.WriteLine(string.Format("{0}:{1}", 4, 5));

            Console.WriteLine("----------");

            //testnoboxing
            var result = 1.ToString() + ":"+2.ToString();
            Console.WriteLine(result);
        }
    }
}

其对应的IL指令
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // 代码大小       71 (0x47)
  .maxstack  3
  .locals init ([0] int32 V_0)
  IL_0000:  ldstr      "{0}:{1}"
  IL_0005:  ldc.i4.4
  IL_0006:  box        [mscorlib]System.Int32
  IL_000b:  ldc.i4.5
  IL_000c:  box        [mscorlib]System.Int32
  IL_0011:  call       string [mscorlib]System.String::Format(string,
                                                              object,
                                                              object)
  IL_0016:  call       void [mscorlib]System.Console::WriteLine(string)

  IL_001b:  ldstr      "----------"

  IL_0020:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0025:  ldc.i4.1  //将整数值 1 作为 int32 推送到计算堆栈上。
  IL_0026:  stloc.0   //从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。
  IL_0027:  ldloca.s   V_0  //将位于特定索引处的局部变量的地址加载到计算堆栈上(短格式)。
  IL_0029:  call       instance string [mscorlib]System.Int32::ToString()
  IL_002e:  ldstr      ":"  //
  IL_0033:  ldc.i4.2  //将整数值 2 作为 int32 推送到计算堆栈上。
  IL_0034:  stloc.0   //从计算堆栈的顶部弹出当前值并将其存储到索引 0 处的局部变量列表中。
  IL_0035:  ldloca.s   V_0  //将位于特定索引处的局部变量的地址加载到计算堆栈上(短格式)。
  IL_0037:  call       instance string [mscorlib]System.Int32::ToString()
  IL_003c:  call       string [mscorlib]System.String::Concat(string,
                                                              string,
                                                              string)
  IL_0041:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_0046:  ret
} // end of method Program::Main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值