在 C# 中使用 Array.GetLength(dimension)
时,数组的大小是在每次调用时实际计算出来的,还是缓存/存储的大小,然后才访问该值?
我真正想知道的是,如果在大循环中使用,将局部变量设置为数组维度的长度是否会提高效率,或者我是否可以一遍又一遍地调用 array.GetLength() w/o 任何速度惩罚。
最佳答案
在这里自己开始缓存/优化肯定不是一个好主意。
在处理数组时,您必须遵循 (JIT) 优化器可以识别的标准路径。如果这样做,不仅 Length 属性会被缓存,更重要的是,索引边界检查可以在循环之前只进行一次。
当优化器丢失您的踪迹时,您将支付每次访问边界检查的罚款。
这就是为什么交错数组 (int[][]
) 比 multi-dim (int[,]
) 更快的原因。 int[,]
的优化完全缺失。无论如何,直到 Fx2,我还没有在 Fx4 中检查它的状态。
如果您想进一步研究这个问题,您建议的缓存通常称为“hoisting”。 ' 长度属性。
关于c# - C# 中的 Array.GetLength(dimension) 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3176288/