当前位置:  开发笔记 > 编程语言 > 正文

在循环中执行array.length或list.count是否代价高昂

如何解决《在循环中执行array.length或list.count是否代价高昂》经验,为你挑选了2个好方法。

我知道在JavaScript中,像这样创建一个for循环:for(int i = 0; i < arr.length; i++)因为它每次都计算数组长度,所以代价很高.对于列表和数组,这种行为在c#中是否代价高昂.或者在编译时它是否经过优化?还有其他语言如Java,这是如何处理的?



1> Konrad Rudol..:

它在C#中并不昂贵.一方面,没有"计算":由于内联,查询长度基本上是一个基本操作.其次,因为(根据其开发人员),编译器识别这种访问模式,并且实际上将优化任何(冗余)边界检查以访问数组元素.

顺便说一句,我相信类似的东西对于现代JavaScript虚拟机来说也是如此,如果还没有,那么很快就会发生这种情况,因为这是一个微不足道的优化.



2> Pop Catalin..:

    所有.Net数组都有一个包含数组长度的字段,因此在使用时但在创建时不会计算长度.

    .Net虚拟机非常擅长在可能的情况下消除边界检查,这是其中一种情况,其中边界检查被移动到循环之外(在大多数情况下,如果不是,它只是2个指令开销).

编辑:

阵列边界检查消除

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有