for
문과 foreach
문을 비교해보자.
배열에서 for
와 foreach
의 큰 차이는 없다. 그러나 List<T>
에서는 약 4-5배
의 차이가 있었다.
여기에 호기심이 생겨 추가적으로, 단순한 반복문에 단순한 조건문을 달았다.
결과는 아래와 같다.
ListForeachIf
의 경우 104ns
ListForeachLINQ
의 경우 47ns
+ 1회 가비지 생성
ListForeachLinqNotOptimize
의 경우 345ns
+ 컬렉션 크기 * 가비지 생성
크기 1000
인 단순 int
배열을 for
와 foreach
로 테스트 했다.
보다시피 별 차이가 없다. 그나마 foreach
가 BenchmarkDotNet측정치와 비슷한 비율만큼 느리다고 추정할 수 있다.
x100
만큼 업스케일링한 결과는 아래와 같다.60fps 이상의 최적화가 필요한 프로젝트라면, 1ms , 0.1ms가 중요한 경우가 아니라면 적당히 사용하는 것은 큰 문제가 되지 않는다.
일반적으로 되도록 Array
를 사용하고 가독성 좋은 foreach
를 권장한다. 인덱스나 특수한 경우에만 for
문을 사용한다.
성능을 중시한다면 List<T>
의 foreach
는 배열보다 10배 가까이 느리다는 것을 고려하자.