【发布时间】:2010-11-24 15:20:31
【问题描述】:
我一直在使用 Visual Basic 中不同类型的本机代码操作,然后使用 Reflector 检查代码以查看生成的 MSIL 类型。例如,我想知道,在一行 If-Then-Else 不同于 If-Then-Else 拆分为多行,即。
If x > y Then x Else y
对比
If x > y Then
x
Else
y
End If
原来这两个编译成相同的 MSIL。然后我想知道新的 If operator,类似于旧的 IIf function。重要的是要注意 IIf 确实是一个函数,因此会产生函数调用的开销,因此虽然它看起来很简洁,但它也有其缺点。此外,它在返回值之前评估 TruePart 和 FalsePart,即。不是短路,所以它可能有意想不到的行为。所以,我会坚持使用 If 运算符。
事实证明,当您将 If 运算符用于相同的功能时,就像这样......
If(x > y, x, y)
生产的 MSIL 体积更小,而且看起来效率更高。这让我想到了这个主题的问题。
编译成 MSIL 的代码大小是否必然与代码速度相关?
【问题讨论】:
标签: vb.net performance cil