C# & Unity for vs foreach

Changhoony·2023년 1월 17일
0

들어가며...

for문과 foreach문을 비교해보자.

BenchmarkDotnet 결과

배열에서 forforeach의 큰 차이는 없다. 그러나 List<T>에서는 약 4-5배의 차이가 있었다.

여기에 호기심이 생겨 추가적으로, 단순한 반복문에 단순한 조건문을 달았다.

결과는 아래와 같다.

ListForeachIf의 경우 104ns
ListForeachLINQ의 경우 47ns + 1회 가비지 생성
ListForeachLinqNotOptimize의 경우 345ns + 컬렉션 크기 * 가비지 생성

Unity Profile 결과

크기 1000인 단순 int배열을 forforeach로 테스트 했다.

보다시피 별 차이가 없다. 그나마 foreach가 BenchmarkDotNet측정치와 비슷한 비율만큼 느리다고 추정할 수 있다.

  • x100만큼 업스케일링한 결과는 아래와 같다.

  • 60fps 이상의 최적화가 필요한 프로젝트라면, 1ms , 0.1ms가 중요한 경우가 아니라면 적당히 사용하는 것은 큰 문제가 되지 않는다.

  • 일반적으로 되도록 Array를 사용하고 가독성 좋은 foreach를 권장한다. 인덱스나 특수한 경우에만 for문을 사용한다.

  • 성능을 중시한다면 List<T>foreach는 배열보다 10배 가까이 느리다는 것을 고려하자.

profile
Unity 개발

0개의 댓글