使用 'var' 对 C# 编译器的性能有多大影响?

Posted

技术标签:

【中文标题】使用 \'var\' 对 C# 编译器的性能有多大影响?【英文标题】:How much impact does use of 'var' have on performance of C# Compiler?使用 'var' 对 C# 编译器的性能有多大影响? 【发布时间】:2011-01-18 06:31:35 【问题描述】:

我发现var 关键字极大地帮助减少了我的 C# 代码中的噪音,而且几乎不损失可读性;我想说我现在只在编译器强制我使用显式类型时才使用。

我知道using var does not change the runtime characteristics of my code。但是我刚刚想到一个问题:我是否在编译时为编译器现在代表我所做的所有额外工作付出了巨大的代价?

有没有人做过任何基准测试,看看广泛使用 var编译时间有多大影响?

【问题讨论】:

你有任何证据或理由支持这个答案吗? 我错误地投票结束(但我不能收回我的投票)。另一个问题在某种程度上是相关的,但并不完全重复。 为了注意到差异,项目必须非常大,否则编译时间会很长。您将尝试解决 15 分钟编译的问题,而不关心 var 关键字。类型推断是 F# 的主要功能之一,在声明 NO 类型的 F# 项目中,我没有注意到任何可测量的差异。这个问题太傻了。 感觉这个问题还没回答。当您使用 var 时,编译器显然会执行不同的操作,直到有人做了一些基准测试,或者对它会产生的影响提出准确的推理,这个问题应该保持开放。 类似问题***.com/questions/356846/… 【参考方案1】:

我的建议:双向尝试。测量结果。那你就知道了。

我没有做过任何基准测试,即使我做过,也不能回答你的问题。我们不知道你有什么硬件,你的机器上还运行着什么,一个典型的程序是什么样的。我们也不知道您认为什么是可接受或不可接受的表现。你是唯一一个知道这一切的人,所以你是唯一能回答这个问题的人。

【讨论】:

@didibus:我鼓励您发布您更喜欢的答案。 回想起来,我发现我有点脱节了。我只是希望 OP 不会回答这个问题,这样也许最终,确实有实际基准数据或对编译器的性能影响进行推理的人会在这里分享它们。或者,如果 OP 确实遵循了这个答案,并执行了他自己的基准测试,他是否可以在这里分享结果。【参考方案2】:

无论如何都需要检查类型,这甚至可以节省时间...好吧,不太可能:) 不过,您不必在意 - 如果您的开发环境很慢,请购买更多内存或新计算机。不要改变你编写代码的方式。

【讨论】:

+1 ... 如果与 C 或 C++ 等其他语言相比,编译 C# 的速度非常快 我很欣赏这一点:我不会因此而改变我的编程习惯 - 但我想了解一些关于它所产生的差异的细节。 你知道编译器已经为你做了多少不同的事情了吗? var 只是另一个小任务... +1 表示“甚至可以节省时间”。没有理由假设类型推断会花费时间。实际上,使用右侧的类型应该比检查该类型是否可分配给左侧快 1.271 飞秒。 另外,从文本中解析令牌 var 将比解析令牌 IDictionary<int, IEnumerable<IFish>> 更快,又节省了 0.431 飞秒。【参考方案3】:

正确的答案是“无法衡量”。有关 C# 编译器在编译时进行的传递的部分(但很长)列表,请查看此处:

http://blogs.msdn.com/ericlippert/archive/2010/02/04/how-many-passes.aspx

然后了解类型推断只是该列表中单次传递的一部分。

【讨论】:

不过,列表的长度并没有真正说明每个项目的相对时间权重。【参考方案4】:

无论如何都需要找到右侧的类型才能进行类型检查和/或类型转换。将结果分配给变量的类型很便宜。大部分成本(如果有的话)将用于在声明所有局部变量之前允许对表达式进行评估所必须做的事情,但即使您不使用 var,您也要为此付费。 (顺便说一句,上述约束有可能甚至可能根本不会影响性能。)

【讨论】:

以上是关于使用 'var' 对 C# 编译器的性能有多大影响?的主要内容,如果未能解决你的问题,请参考以下文章

性能:前端的性能到底对业务数据有多大的影响?

虚拟化技术: Intel VT对CPU的性能有多大影响?它重要吗?系统没它有影响吗?

一款智能搜索引擎,对于手机体验影响到底有多大?

最全最新数据分析,贸易战对中国的GDP影响有多大?

耳机延长线对耳机音质有多大影响?

云计算对物流业产生的影响有多大