首页 > 开发 > 综合 > 正文

简单代码的性能差异

2024-07-21 02:17:07
字体:
来源:转载
供稿:网友

商业源码热门下载www.html.org.cn

《.net 框架程序设计》里的几句代码,我重新整理了一下,写成函数,这样下面的反编译代码看起来更方便点:

public void boxing()
{
int32 v = 5;
console.writeline("{0},{1},{2}",v,v,v);
}
public void boxing1()
{
int32 v = 5;
object o = v;
console.writeline("{0},{1},{2}",o,o,o);
}两个函数的输出结果是一样的,但是哪一个函数更好呢?

第一个显然更简单,但是在性能上第二个好,看看反编译的代码:
boxing函数:
.method public hidebysig instance void boxing() cil managed
{
// code size: 31 byte(s)
.maxstack 4
.locals (
int32 v_0)
l_0000: ldc.i4.5
l_0001: stloc.0
l_0002: ldstr "{0},{1},{2}"
l_0007: ldloc.0
l_0008: box int32
l_000d: ldloc.0
l_000e: box int32
l_0013: ldloc.0
l_0014: box int32
l_0019: call void [mscorlib]system.console::writeline(string, object, object, object)
l_001e: ret
}



boxing1函数的:
.method public hidebysig instance void boxing1() cil managed
{
// code size: 23 byte(s)
.maxstack 4
.locals (
int32 v_0,
object v_1)
l_0000: ldc.i4.5
l_0001: stloc.0
l_0002: ldloc.0
l_0003: box int32
l_0008: stloc.1
l_0009: ldstr "{0},{1},{2}"
l_000e: ldloc.1
l_000f: ldloc.1
l_0010: ldloc.1
l_0011: call void [mscorlib]system.console::writeline(string, object, object, object)
l_0016: ret
}


第一个函数有三次装箱操作,第二个只有一次,在内存和时间消耗上都要小些。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表