使用';var';对C#编译器的性能有什么影响?

使用';var';对C#编译器的性能有什么影响?,c#,compiler-construction,var,C#,Compiler Construction,Var,我发现var关键字大大有助于减少我的C#代码中的噪音,而且可读性几乎没有损失;我要说的是,我现在只在编译器强制我使用显式类型时才使用显式类型 我知道。但是我突然想到了一个问题:编译器现在为我所做的所有额外工作,我是否在编译时付出了巨大的代价 有没有人做过任何基准测试来看看大量使用var对编译时间的影响有多大?无论如何都需要检查类型,这甚至可以节省时间。。。好的,不太可能:) 不过你不应该在意——如果你的开发环境很慢,那就买更多的内存或者一台新电脑。不要改变编写代码的方式。正确答案是“没有可测量的

我发现
var
关键字大大有助于减少我的C#代码中的噪音,而且可读性几乎没有损失;我要说的是,我现在只在编译器强制我使用显式类型时才使用显式类型

我知道。但是我突然想到了一个问题:编译器现在为我所做的所有额外工作,我是否在编译时付出了巨大的代价


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

无论如何都需要检查类型,这甚至可以节省时间。。。好的,不太可能:)
不过你不应该在意——如果你的开发环境很慢,那就买更多的内存或者一台新电脑。不要改变编写代码的方式。

正确答案是“没有可测量的东西”。有关C#编译器在编译时进行的部分(但很长)过程列表,请参见以下内容:


然后了解类型推断只是该列表上单个过程的一部分

我的建议是:两方面都试试。测量结果。那你就知道了


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

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

你有任何证据或理由支持这个答案吗?我错误地投票赞成结束投票(但我不能收回我的投票)。另一个问题在某种程度上是相关的,但不是完全重复的。为了注意到差异,项目必须非常大,您无论如何都会有大量的编译时间。您将试图解决15分钟编译的问题,而不关心var关键字。类型推断是F#的主要特征之一,在一个没有声明任何类型的F#项目中,我没有注意到任何可测量的差异。这个问题在我看来很愚蠢。我觉得这个问题还没有得到回答。当您使用var时,编译器的性能明显不同,除非有人做了一些基准测试,或者对它可能产生的影响提出了准确的推理,否则这个问题应该一直悬而未决。类似的问题+1。。。与C或C++等其他语言相比,C#的编译速度非常快。我明白这一点:我不会因此而改变我的编程实践,但我想了解它所带来的差异。你知道编译器已经为你做了多少不同的事情了吗<代码>变量只是另一个小任务…+1表示“甚至可以节省时间”。没有理由假设类型推断需要花费时间;事实上,仅使用右侧的类型应该比检查该类型是否可分配给左侧快1.271飞秒。另外,从文本解析令牌
var
将比解析令牌
IDictionary
快,再节省0.431飞秒。不过,列表的长度并没有真正说明每个项目的相对时间权重。@didibus:我鼓励你发布一个你更喜欢的答案。回想起来,我发现我有点脱离实际。我只希望OP能保持这个问题没有答案,这样最终,可能有人会有实际的基准数据或对编译器的性能影响进行推理,并在这里分享这些数据。或者如果OP真的遵循了这个答案,并且执行了他自己的基准测试,如果他可以在这里分享结果。