Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在一行中多次获取对象属性,而不是一次获取并存储在变量中。编译器会优化它吗?_C#_Performance_Compiler Construction_Properties_Get - Fatal编程技术网

C# 在一行中多次获取对象属性,而不是一次获取并存储在变量中。编译器会优化它吗?

C# 在一行中多次获取对象属性,而不是一次获取并存储在变量中。编译器会优化它吗?,c#,performance,compiler-construction,properties,get,C#,Performance,Compiler Construction,Properties,Get,在一行中多次访问对象属性时,存储该属性是否更好?下面是一个相当愚蠢的例子,在一行中多次获取对象属性,以及两种处理方法。如果您在一行中多次访问对象属性,那么该示例是否是一种良好的做法?或者,编译器是否能够优化这些类型的东西,并将导致几乎相同的结果 private string example1() { string prop = SomeObject.prop; StringBuilder builder = new StringBuilder(); for(int

在一行中多次访问对象属性时,存储该属性是否更好?下面是一个相当愚蠢的例子,在一行中多次获取对象属性,以及两种处理方法。如果您在一行中多次访问对象属性,那么该示例是否是一种良好的做法?或者,编译器是否能够优化这些类型的东西,并将导致几乎相同的结果

  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();
}
或者,即使您知道某个财产将立即归还,使用它是否更好?
我很好奇编译器是否足够聪明,能够自动优化这些类型的东西。

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

将其存储在变量中通常会存储对它的引用,因此没有意义。你仍然指向同一件事

如果属性getter为后续调用返回不同的值,则不会!
 class SomeObject{
        public string prop
        {
            get {
                //Do something wierd
                return _prop;
            }
            set {
                _prop = value;
            }
        }
}