아래 첨자를 사용하여 무작위로 액세스할 수 있는 ArrayList와 같은 데이터 구조의 경우 아래 첨자를 사용한 액세스가 foreach를 사용한 순차 액세스보다 빠릅니다. foreach는 이런 방식으로 작성되며, 사용된 프로세스는 추가 개체 Enumerator를 생성하며, 각 액세스에는 더 많은 작업이 필요하므로 성능이 저하됩니다. ArrayList这样的可使用下标进行随机访问的数据结构,使用下标访问,要比foreach的方式进行顺序访问,速度要快一些。foreach这样写法,使用的过程产生一个额外的对象Enumerator,而且每次访问需要更多的操作,降低性能。
foreach는 GetEnumerator를 통해 IEnumerator 개체를 획득하고 IEnumerator를 통해 MoveNext()를 실행합니다. code> 객체.code> 메소드를 사용하여 순회를 위한 Current 속성을 가져옵니다.
Enumerator는 버전 확인 작업을 수행하므로 foreach를 사용하는 것은 스레드로부터 안전합니다
그래서 for의 효율성은 일반적으로 foreach보다 높지만 절대적이라고 말할 수는 없습니다. 🎜
🎜그럼 어떻게 선택하나요? 내 제안은 여러 스레드에서 액세스할 수 있는 일부 전역 데이터 구조 개체에 대해 foreach를 사용하는 것입니다. 지역변수는 효율성과 안전성을 모두 고려한 for를 사용해보세요! 🎜
🎜
🎜업데이트: 방금 정보를 확인한 결과 10W 수준 이상의 어레이에서는 foreach가 더 효율적이지만 1W 수준의 어레이에서는 for가 여전히 더 효율적이라는 것을 알았습니다. 🎜http://blog.csdn.net/w2cschoo...🎜
아래 첨자를 사용하여 무작위로 액세스할 수 있는
ArrayList
와 같은 데이터 구조의 경우 아래 첨자를 사용한 액세스가foreach
를 사용한 순차 액세스보다 빠릅니다.foreach
는 이런 방식으로 작성되며, 사용된 프로세스는 추가 개체Enumerator
를 생성하며, 각 액세스에는 더 많은 작업이 필요하므로 성능이 저하됩니다.ArrayList
这样的可使用下标进行随机访问的数据结构,使用下标访问,要比foreach
的方式进行顺序访问,速度要快一些。foreach
这样写法,使用的过程产生一个额外的对象Enumerator
,而且每次访问需要更多的操作,降低性能。foreach
是通过GetEnumerator
获得一个IEnumerator
对象,通过IEnumerator
对象执行MoveNext()
方法和获取Current
属性进行遍历的。由于
Enumerator
中,做了版本检查处理
的工作,所以使用foreach
是线程安全
所以
for
的效率通常来说是高于foreach
的,但话也不能说是绝对。那么如何选择呢?我的建议是,在一些全局的,多线程可以访问的数据结构对象,使用
foreach
。而对本地变量,则使用for
foreach
는GetEnumerator
를 통해IEnumerator
개체를 획득하고IEnumerator
를 통해MoveNext()
를 실행합니다. code> 객체.code> 메소드를 사용하여 순회를 위한Current
속성을 가져옵니다.Enumerator
는버전 확인
작업을 수행하므로foreach
를 사용하는 것은스레드로부터 안전
합니다for
의 효율성은 일반적으로foreach
보다 높지만 절대적이라고 말할 수는 없습니다. 🎜 🎜그럼 어떻게 선택하나요? 내 제안은 여러 스레드에서 액세스할 수 있는 일부 전역 데이터 구조 개체에 대해foreach
를 사용하는 것입니다. 지역변수는 효율성과 안전성을 모두 고려한for
를 사용해보세요! 🎜 🎜 🎜업데이트: 방금 정보를 확인한 결과 10W 수준 이상의 어레이에서는 foreach가 더 효율적이지만 1W 수준의 어레이에서는 for가 여전히 더 효율적이라는 것을 알았습니다. 🎜http://blog.csdn.net/w2cschoo...🎜foreach
특히 php7에서는 배열의 데이터 구조를 수정한 후 foreach가 더 빨라졌습니다
배열을 순회하려면 foreach를 사용하는 것이 더 좋습니다. 결국 배열을 먼저 계산할 필요가 없습니다.