在一行中多次获取对象属性vs获取一次并存储在变量中.编译器会优化它吗?
本文关键字:获取 变量 编译器 存储 优化 属性 一行 取对象 一次 vs | 更新日期: 2023-09-27 18:14:07
当您在一行中多次访问对象属性时,存储对象属性是否更好?下面是一个相当愚蠢的例子,连续多次获得对象属性和两种处理方法。如果您在一行中多次访问对象属性,那么示例一是一个好的实践吗?或者编译器能够对这些东西进行优化,并得到几乎相同的结果?
private string example1()
{
string prop = SomeObject.prop;
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 9000; i++;){
builder.Append(prop);
}
return builder.ToString();
}
private string example2(){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < 9000; i++;){
builder.Append(SomeObject.prop);
}
return builder.ToString();
}
}
如果第一个例子更好,那么当您关心对象在返回属性之前做某事时是否更好
class SomeObject{
public string prop
{
get {
//Do something wierd
return _prop;
}
set {
_prop = value;
}
}
}
或者当您知道属性将立即返回时使用它更好吗?我很好奇编译器是否足够聪明,可以自动优化这些东西
编译器不会"优化"它,因为它不控制该属性的值是否在调用之间发生变化。在这种情况下,局部变量不会改变,但属性可能会改变。
将它存储在变量中通常是要存储对它的引用,因此实际上没有意义。你还是指向同一个东西。