使用“var”会影响性能吗?

使用“var”会影响性能吗?

早些时候我问了一个问题为什么我看到这么多例子使用var关键词并且得到的答案是,虽然只对匿名类型有必要,但它还是用来使代码编写“更快”/更容易和“仅仅是因为”。

以下这个链接(“C#3.0-Var不是objec”)我看到了var在IL中编译到正确的类型(您将看到它大约在下一篇文章中)。

我的问题是,IL代码使用var关键字接受,如果代码在任何地方都被使用,那么它会不会接近于一个可测量的代码性能的水平?


潇湘沐
浏览 1007回答 3
3回答

暮色呼如

没有额外的IL代码var关键字:对于非匿名类型,产生的IL应该是相同的。如果编译器无法创建该IL,因为它无法确定您打算使用哪种类型,那么您将得到一个编译器错误。唯一的诀窍是var如果要手动设置接口或父类型,则将推断该类型的确切类型。8年后更新我需要更新这一点,因为我的理解已经改变。我现在相信这是可能的var若要影响在方法返回接口的情况下的性能,但您应该使用精确的类型。例如,如果您有此方法:IList<int>&nbsp;Foo(){ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Enumerable.Range(0,10).ToList();}考虑这三行代码来调用该方法:List<int>&nbsp;bar1&nbsp;=&nbsp;Foo();IList<int>&nbsp;bar&nbsp;=&nbsp;Foo();var&nbsp;bar3&nbsp;=&nbsp;Foo();这三个编译和执行都是预期的。但是,前两行是不完全相同,第三行将匹配第二行,而不是第一行。因为.的签名Foo()是返回一个IList<int>,这就是编译器将如何构建bar3变量。从性能的角度来看,大多数情况下你不会注意到。然而,在某些情况下第三行的性能可能不如第一行的速度快。..当您继续使用bar3变量时,编译器可能无法以相同的方式分派方法调用。请注意,抖动可能(可能甚至)能够消除这种差异,但这并不一定。一般来说,你还是应该考虑var在性能上是一个非因素。当然一点也不像使用dynamic变量。但是说它一点也不重要,这可能是夸大了它。
打开App,查看更多内容
随时随地看视频慕课网APP