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배 가까이 느리다는 것을 고려하자.