c# - 自动属性与具有可变性能考虑的属性

标签 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 + ")

 }  
}

最佳答案

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

编辑:

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

public string Property { get; set; }

..变成:

private string _property;

public string get_Property() {
    return _property;
}

public void set_Property(string value) {
    _property = value;
}

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

Property = "some value";

它不会生成这个:

set_Property("some value");

这样做的可能性更大:

_property = "some value";

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

关于c# - 自动属性与具有可变性能考虑的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18566026/

相关文章:

c# - 对象初始值设定项中的属性可以相互引用吗?

java - Struts 2 : ui. struts.properties 中的主题更改未得到反射(reflect)

css - -moz-inline-box 与 -moz-inline-stack

c# - 如何在WPF中的左侧添加一个复选框

c# - .NET Core 中 Microsoft Fakes 的任何替代方案?

用于获取已安装或选定打印机的最大 dpi 的 C# 代码

ios - Swift 中用于安全初始化 @IBInspectables 的单行代码

wpf - 使用 Xaml 和 WPF,如何在单击时为属性设置动画,然后在连续单击时反转

c# - 如何向 Console.ReadLine() 添加超时?

c# - 简单的 C# 日志文件