본문 바로가기
Works/C#

For vs Foreach

by Vader87 2018. 12. 4.
반응형

C# 에서 "For문이 Foreach 보다 좋다"라고 막연하게 알고 있었는데 많은 사람들이 Foreach문을 사용하는 것을 볼 수 있었다. 이에 의심을 갖고 직접 테스트를 해보기로 했다.


연산 속도

테스트 코드

class Tester
{
        static int ForWithArray(int[] array)
        {
            int t = 0;

            for (int i = 0; i < array.Length; i++)
                t += array[i];

            return t;
        }

        static int ForeachWithArray(int[] array)
        {
            int t = 0;

            foreach (var v in array)
                t += v;

            return t;
        }

        static int ForWithList(List list)
        {
            int t = 0;

            for (int i = 0; i < list.Count; i++)
                t += list[i];

            return t;
        }

        static int ForeachWithList(List list)
        {
            int t = 0;

            foreach (var v in list)
                t += v;

            return t;
        }
        
        ...
}


테스트 환경

OS Windows 10 x64

Visual Studio C# 2015

.NET ?

측정 단위 : ms


1. Single 테스트 / Array Size : 100000000

Debug

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 For-Array

216

217

214

210

216

214

213

224

217

213

 Foreach-Array

230

231

237

232

238

234

233

222

229

239

 For-List

581

577

579

571

564

576

570

567

572

583

 Foreach-List

451

447

458

457

448

452

461

456

457

454

Release

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 For-Array

52

41

54

50

42

43

40

54

40

42

 Foreach-Array

41

47

53

46

44

51

44

45

42

44

 For-List

64

64

61

63

66

62

70

64

68

65

 Foreach-List

346

277

270

281

278

276

273

267

271

277

100,000,000의 크기를 가진 배열을 1회 탐색한 결과 이다.

Release 평균 / For-Array 45.8 / Foreach-Array 45.7 / For-List 64.7 / Foreach-List 281.6

배열 이용 시 큰 차이는 없으나 List 이용 시 4배 이상의 차이가 난다.


2. Loop 테스트/ Array Size : 1000000 / Loop Time : 1000

Debug

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 For-Array

2298

2272

2385

2327

2308

2357

2407

2326

2331

2390

 Foreach-Array

2368

2311

2395

2368

2363

2391

2355

2354

2359

2421

 For-List

5644

5637

5621

5660

5639

5656

5646

5643

5627

5777

 Foreach-List

4492

4457

4473

4430

4464

4472

4452

4452

4456

4508

Release

 

 1

 2

 3

 4

 5

 6

 7

 8

 9

 10

 For-Array

644

606

543

680

696

576

670

722

585

598

 Foreach-Array

817

739

707

763

837

780

733

724

710

794

 For-List

690

675

690

684

681

702

665

673

669

687

 Foreach-List

2822

2806

2813

2838

2807

2770

2746

2841

2844

2807

1,000,000의 크기를 가진 배열을 1000번 탐색하였다.

위와 비슷하게 배열 이용 시 Single 일 때보다 조금 더 차이가 나고,  List 이용 시 4배 이상의 차이가 난다.


결론

성능이 중요한 경우 List 보다는 Array, Foreach문 보단 For문을 사용하자.


참고

C# For Versus Foreach Performance

An easy and efficient way to improve .NET code performances

반응형

'Works > C#' 카테고리의 다른 글

Covariance and Contravariance  (0) 2022.01.19
C# 암호화 변수  (0) 2020.09.23
[.NET] Windows Registry 등록/삭제  (0) 2019.09.08
[.NET] Java Bridge  (2) 2019.03.22

댓글