为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇湘沐 2019-07-15 14:59:35
使用“var”会影响性能吗?早些时候我问了一个问题为什么我看到这么多例子使用var关键词并且得到的答案是,虽然只对匿名类型有必要,但它还是用来使代码编写“更快”/更容易和“仅仅是因为”。以下这个链接(“C#3.0-Var不是objec”)我看到了var在IL中编译到正确的类型(您将看到它大约在下一篇文章中)。我的问题是,IL代码使用var关键字接受,如果代码在任何地方都被使用,那么它会不会接近于一个可测量的代码性能的水平?
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

没有额外的IL代码var关键字:对于非匿名类型,产生的IL应该是相同的。如果编译器无法创建该IL,因为它无法确定您打算使用哪种类型,那么您将得到一个编译器错误。

唯一的诀窍是var如果要手动设置接口或父类型,则将推断该类型的确切类型。


8年后更新

我需要更新这一点,因为我的理解已经改变。我现在相信这是可能的var若要影响在方法返回接口的情况下的性能,但您应该使用精确的类型。例如,如果您有此方法:

IList<int> Foo(){
    return Enumerable.Range(0,10).ToList();}

考虑这三行代码来调用该方法:

List<int> bar1 = Foo();IList<int> bar = Foo();var bar3 = Foo();

这三个编译和执行都是预期的。但是,前两行是完全相同,第三行将匹配第二行,而不是第一行。因为.的签名Foo()是返回一个IList<int>,这就是编译器将如何构建bar3变量。

从性能的角度来看,大多数情况下你不会注意到。然而,在某些情况下第三行的性能可能不如第一行的速度快。..当您继续使用bar3变量时,编译器可能无法以相同的方式分派方法调用。

请注意,抖动可能(可能甚至)能够消除这种差异,但这并不一定。一般来说,你还是应该考虑var在性能上是一个非因素。当然一点也不像使用dynamic变量。但是说它一点也不重要,这可能是夸大了它。


查看完整回答
反对 回复 2019-07-15
  • 3 回答
  • 0 关注
  • 1067 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信