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;
}
}
}