【发布时间】:2013-12-13 21:06:05
【问题描述】:
假设我们有以下模型:
public class Father
{
public Child Child { get; set; }
public string Name { get; set; }
public Father() { }
}
public class Child
{
public Father Father;
public string Name { get; set; }
}
以及以下实现:
var father = new Father();
father.Name = "Brad";
var child = new Child();
child.Father = father;
child.Name = "Brian";
father.Child = child;
现在我的问题是: coden-p #1 是否等同于coden-p #2?
或者运行coden-p #1是否需要更长的时间?
代码片段#1:
var fatherName = father.Child.Father.Child.Father.Child.Name;
代码片段 #2:
var fatherName = father.Name;
【问题讨论】:
-
我的投票是YES。
-
是的,编译器不会优化它。
-
值得注意的是,即使编译器没有优化第二个到第一个,代码sn-p的所有相关内存位置都将清楚地放入缓存中,因此实际上解决了再次在父子之间进行引用,并且增益将超级快,因为所有内容都已经在缓存中。
-
抖动只是为了优化健全的代码而编写的,它不会消耗宝贵的 CPU 周期来寻找愚蠢的腻子。
-
@HansPassant 是的。虽然要确定什么是“理智的”并不总是那么容易。
标签: c# optimization compiler-construction