在 C# 中有什么方法可以将属性标记为确定性的?
我问的原因是我经常发现自己声明一个局部变量并将属性读入其中,而不是多次访问该属性。
有什么方法可以将属性修饰为确定性的,以便编译器可以优化对该属性的多次访问?我猜测在这种情况下,该类需要是不可变的,并且需要这样装饰。
这是存在的东西还是我在抓救命稻草?
最佳答案
如果属性很简单,比如隐式属性:
public int X { get; set; }
或者从局部变量读取:
public int X { get { return _x; } }
然后编译器将优化代码,以便多次访问该属性与将属性放入变量并访问它之间没有区别。
我通过比较 1 亿次迭代访问属性 10 次和将属性复制到变量并访问 10 次来验证这一点,根本没有可测量的差异。
通常,属性应该是轻量级的,这样您就不必在每次访问它时都进行繁重的处理。如果属性值的获取成本很高,则该类应在内部缓存该值,以便读取属性只会在第一次进行成本高昂的操作(延迟加载模式)。
如果一个属性每次获取的成本都很高,那么它根本不应该是一个属性,而应该是一个 getter 方法。
关于c# - 属性(property)决定论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716053/