自动属性与具有变量的属性 - 性能考虑

sjd*_*sjd 1 c# properties

我理解差异。两者之间。并阅读与此相关的主题。我的问题是关于任何性能提升。我曾经用局部变量创建属性。每当我在类中使用属​​性时,我都会使用局部变量而不是属性。我认为这有一点好处,而不是调用属性,然后调用局部变量的属性。在自动属性中,这是不可能的。我的假设正确吗?它在我的方法中是否有任何收益(可能很小)?

样本

Public class class1
{
 private int _someField;
 public int SomeField
 {
  get{return _someField;}
  set {_someField = value;} 
 }

 Public void Insert()
 {
     str= "insert into table values(" + SomeField + ")  
     //or is it better to use like this?
    str= "insert into table values(" + _someField + ")

 }  
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*ead 5

无论您使用编译器转换为方法调用的自动属性.. 还是直接访问支持字段.. 无论如何,JIT 编译器很可能会内联该字段访问。

编辑:

自动属性被编译成方法调用。所以这:

public string Property { get; set; }
Run Code Online (Sandbox Code Playgroud)

..变成:

private string _property;

public string get_Property() {
    return _property;
}

public void set_Property(string value) {
    _property = value;
}
Run Code Online (Sandbox Code Playgroud)

JIT 编译器看到这一点时,它很可能会内联字段访问(它确实是一个主要的候选者)。因此,如果您这样做:

Property = "some value";
Run Code Online (Sandbox Code Playgroud)

它不会产生这个:

set_Property("some value");
Run Code Online (Sandbox Code Playgroud)

更有可能这样做:

_property = "some value";
Run Code Online (Sandbox Code Playgroud)

所以,真的,根本没有惩罚。重要的是要注意,这是特定于实现的(特定于 JIT 编译器实现)。但老实说,如果这种事情不是内联的候选者,我不知道是什么!