在C#中使用Array.GetLength(dimension)
时,实际上是在每次调用数组时实际计算出数组的大小,还是缓存/存储了数组的大小并且只访问了该值?
我真正想知道的是,如果将局部变量设置为数组的维数长度,如果在大循环中使用它,或者我可以反复调用array.GetLength()而不会提高速度,是否会提高效率?惩罚。
最佳答案
在这里自己开始缓存/优化无疑是一个坏主意。
处理数组时,必须遵循(JIT)优化器可以识别的标准路径。如果这样做,不仅会缓存Length属性,更重要的是,可以在循环之前进行一次index bounds-check。
当优化器丢失您的跟踪记录时,您将支付每次访问范围检查的罚款。
这就是为什么锯齿状数组(int[][]
)比多维度数组(int[,]
)更快的原因。缺少int[,]
的优化。无论如何,直到Fx2,我都没有在Fx4中检查此状态。
如果您想进一步研究,建议的缓存通常称为'hoisting'Length属性。
关于c# - C#中的Array.GetLength(dimension)实际如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3176288/