2014-03-07 108 views
19

以下变量初始化之间的运行时性能是否有区别?将'var'初始化为空

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

从埃里克利珀:_IF你有两匹马,你想知道哪两个是faster_ **然后比赛你的马** http://ericlippert.com/2012/12/17/performance-rant/ –

+8

'var'与'someothertype'将永远不会*具有运行时性能影响,因为'var'是一个* compile *时间结构。 –

+0

所有这些都比将x的值初始化为您希望它的值(这可能是方法调用的返回值)要慢。的 –

回答

50

相信没有,因为在编译的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 

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

+0

好的,谢谢!有人告诉我,你不应该在C#中初始化变量。不知道是否同样适用于例如'int x' vs'int x = 0'。 – CompuChip

+0

@CompuChip你不能访问未初始化的本地变量。你在谈论实例成员吗? –

+0

对不起,很明显我是。给我的原因是不初始化会使用像'ldnull'这样的东西来将整个块清零,而将其设置为'0'将会在其顶部产生明确的指令。但是我会认为类似的观点是初始化指向'null'的指针,而这个指针显然是错误的 - 因此是一个问题。 – CompuChip

7

首先:不,我认为这三个调用是基本相等。

其次:即使它们之间有什么区别,它肯定会是如此微不足道,这将是在一个应用程序完全无关。

这是这样一个小片的任何程序,即侧重于这里的优化和在类似的情况下,往往会浪费时间,并且可能在某些情况下使你的代码没有很好的理由更复杂。

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