加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:36:50 所属栏目:百科 来源:网络整理
导读:在C#中使用Array.GetLength(维度)时,每次调用时是否实际计算了数组的大小,或者是否缓存/存储了该数组的大小? 我真正想知道的是,如果将一个局部变量设置为数组维度的长度,如果在一个大循环中使用,或者我可以一遍又一遍地调用array.GetLength(),那么是否会增
在C#中使用Array.GetLength(维度)时,每次调用时是否实际计算了数组的大小,或者是否缓存/存储了该数组的大小?

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

解决方法

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

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

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

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

如果你想进一步研究这个,你建议的缓存通常被称为’hoisting‘长度属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读