我们说我有一个MyClass
类,它有一个属性int Property { get; }
,因此是一个只读属性。
现在在另一个类中,我有一个for循环,执行类似于此的任务:
for(var i = 0; i < something; ++i)
someArray[myClass.Property + i] = something;
我希望myClass
是对另一个引用Property
的对象的引用,因此我希望在内存中有两个读取(并且内存是众所周知的瓶颈)。
我的问题是:智能的编译器是否真正识别只读属性,并注意到需要多次在本地存储快速访问的参考或实现如下所示的解决方案会节省内存访问?
var tempProperty = myclass.Property;
for (var i = 0; i < something; ++i)
someArray[tempProperty + i] = something;
我试着看看IL,但后来我意识到我并不真正理解它做了什么。
PS:我知道这样的微优化可以节省很少的时间,但是这个循环有类似于1.000.000次迭代,并且我正在一个非常时间关键的环境中工作,所以如果它实际上节省了一些时间会很好(如果编译器比我聪明,我会选择第一个解决方案)。