c# - C# 中的 Array.GetLength(dimension) 是如何工作的?

标签 c# arrays

在 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/

相关文章:

c# - Linq to Object/XML 其中元素不存在

C++ 映射数组键自动增加

java - Array.copyOf() 的时间复杂度

c# - 为什么在这种情况下使用 AsParallel() 比 foreach 慢?

具有下限和上限的 C++ 数组定义?

php - 在 WordPress 常规设置页面中排序输入字段

android - 如何将SoapObject数据存储到数组?

c# - 反转 SQL Server 中列的内容

c# - Windows 注册表中的 ProductName,是否针对不同语言进行了本地化?

c# - 是否有将 AES 256 加密实现为流的 .NET 加密库?