在一行中多次获取对象属性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;
            }
        }
}

或者当您知道属性将立即返回时使用它更好吗?我很好奇编译器是否足够聪明,可以自动优化这些东西

在一行中多次获取对象属性vs获取一次并存储在变量中.编译器会优化它吗?

编译器不会"优化"它,因为它不控制该属性的值是否在调用之间发生变化。在这种情况下,局部变量不会改变,但属性可能会改变。

将它存储在变量中通常是要存储对它的引用,因此实际上没有意义。你还是指向同一个东西。