foreach와 foreach 중 어느 것이 더 나은 성능을 갖고 있나요? 아니면 다른 데이터를 처리하는 데 있어 고유한 장점이 있나요? 누군가 답변해 주셨으면 좋겠습니다.
为情所困2017-05-16 13:10:54
아래 첨자를 사용하여 무작위로 액세스할 수 있는 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...🎜