关键字“var”对编译性能的影响

3

在重构一个大项目(代码行数很多)时,我了解到了ReSharper和使用var而不是类型的主题,这只会影响编译时间。

它是否对编译时间产生了很大的影响?我想在我的公司为此定义一种代码风格,但我不确定自己是否喜欢“过度使用”关键字var的想法...


2
我从来没有听说过var对编译时间有影响。从技术上讲,因为它不再是任何其他常见或不常见的类型(var是3个字符,int也是3个字符,但例如string是5个字符,比var长66%,而且Dictionary<string, MyObject>肯定更长),所以它应该使源代码更小,因此编译器加载更快。 - xanatos
我认为这是你的选择,使用var还是不使用。我们在公司讨论过这个问题,但没有达成一致意见。 - General-Doomer
2
我认为它不会显著影响编译时间,但我对过度使用var关键字有一些强烈的看法... - Ron Beyer
2
我能想到唯一一个可能会出现问题的地方是在印刷出版物中,读者无法将鼠标悬停在变量上以查找其含义。 "var" 可以大大节省时间和空间。当我在代码深处改变某个类型时,我不必“修复”它上面的所有内容,因为它会自动修复。如果您想对此进行严谨的手动批准并检查所有后果,那么我可以理解禁止使用 var,以便每个连锁反应都需要人工审核,但良好的测试覆盖率可以让您知道是否存在任何有害影响。 - Mel
1
@DavidArno:编译器知道它,但开发人员通常不知道。即使今天一切都运行得很完美,也可能需要您或其他人来维护它。那么,提前查看类型会更容易。话虽如此,在明显的类型上使用“var”是减少代码和防止水平滚动的好方法。 - Tim Schmelter
显示剩余7条评论
2个回答

3

根据我的经验,差异可以说是微不足道甚至难以观察。即使在更大的项目中,我也无法找到任何区别。不管var带来了多少差异,统计上都是不显著的,并且在编译工作的其余部分中被忽略掉了。


2

由于C#是一种静态语言,变量类型在编译时就已经确定,因此使用var关键字并不会产生任何影响。


编译器会在编译时将var关键字替换为实际类型,因此对编译器的编译代码有很小的影响。

例如:

var s = "hi";

被替换为

string s = "hi";

我仍然认为这不值得赞赏,但当编译器必须遍历调用层次结构以确定返回类型时,差异会更加明显。想想嵌套的泛型方法... - Ron Beyer
2
它肯定还需要确定返回类型,以便检查 RHS 上的表达式是否与 LHS 声明的类型相同或可以转换为该类型。 - Charles Mager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接