C#中的Array.GetLength(维度)如何实际工作?

dev*_*xer 3 c# arrays

Array.GetLength(dimension)在C#中使用时,每次调用数组时实际上是否计算了数组的大小,或者是否缓存/存储了该数组的大小?

我真正想知道的是,如果将一个局部变量设置为数组维度的长度,如果在一个大循环中使用,或者我可以一遍又一遍地调用array.GetLength(),那么是否会增加任何效率罚款.

Hen*_*man 8

在这里开始缓存/优化肯定是一个坏主意.

处理数组时,必须遵循(JIT)优化器可以识别的标准路径.如果这样做,不仅会缓存Length属性,更重要的是索引边界检查可以在循环之前完成一次.

当优化器丢失您的踪迹时,您将支付每次访问边界检查的罚款.

这就是锯齿状数组(int[][])比multi-dim(int[,])更快的原因.int[,]简化的优化 就是缺失.无论如何,我还没有检查Fx4的状态.

如果你想进一步研究这个问题,你建议的缓存通常称为" 吊装 "长度属性.

  • 此外,文档说明"此方法是一个O(1)操作",表明开销很小. (4认同)