【问题标题】:Initializing a 'var' to null将“var”初始化为空
【发布时间】:2014-04-10 07:02:06
【问题描述】:

以下变量初始化之间的运行时性能是否有差异?

var    x = null as object;
var    x = (object) null;
object x = null;

【问题讨论】:

  • 来自 Eric Lippert:如果你有两匹马,并且你想知道哪两匹马跑得更快 那就让你的马赛跑吧。 @987654321 @
  • varsomeothertype永远对运行时性能产生影响,因为 var 是一个编译时间结构。
  • 所有这些都比将 x 的值初始化为您想要的值(这可能是方法调用的返回值)要慢。

标签: c# null var


【解决方案1】:

我相信没有,因为编译的 IL 没有区别。

var    x = null as object;
var    x1 = (object)null;
object x2 = null;

编译成

IL_0001:  ldnull      
IL_0002:  stloc.0     // x
IL_0003:  ldnull      
IL_0004:  stloc.1     // x1
IL_0005:  ldnull      
IL_0006:  stloc.2     // x2

你可以看到所有的locals都被初始化为null,只使用ldnull操作码,所以没有区别。

【讨论】:

  • 好的,谢谢!有人告诉我,你不应该在 C# 中初始化变量。想知道是否同样适用,例如int xint x = 0.
  • @CompuChip 您无法访问未初始化的局部变量。你说的是实例成员吗?
  • 对不起,很明显我是。给我的原因是不初始化将使用ldnull 之类的东西将整个块归零,而将其设置为0 将生成显式指令在其顶部。但我认为类似的论点与初始化指向 null 的指针有关,您已经证明这显然是错误的 - 因此是这个问题。
【解决方案2】:

首先:不,我相信这三个调用本质上是等价的。

其次:即使它们之间有任何区别,也肯定会如此微不足道,以至于在应用程序中完全无关紧要。

这是任何程序的一小部分,因此在此处和类似情况下专注于优化通常会浪费时间,并且在某些情况下可能会无缘无故地使您的代码变得更加复杂。

有一个更长的interesting discussion about this on the programmers.stackexchange 站点。

【讨论】:

    猜你喜欢
    • 2019-10-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多