본문 바로가기
[개발] 이야기

c#에서 for, foreach, linq어느게 자료 탐색에 빠를까?

by 헤이나우
반응형

for, foreach, linq 정말 많이쓰는 Loop문법이지만 정작 저 3개의 차이를 잘모르고 썼습니다.

그럼 누가더 빠른데 테스트를 통해서 결론을 알아봅시다!!

진행 과정은 가장많이 사용하는 List에 string멤버와 int 멤버를 초기화 후에 탐색하는 시간으로 알아 보겠습니다.

콘솔 프로젝트를 생성한뒤에 string멤버와 int멤버를 갖는 Model Class를 만들어 봅시다

 


public class Model
    {
        public string str { get; set; }

        public string n { get; set; }
    }



그리고 list에 1천만개의 item을 넣어 줍니다.

 


List list = new List();

for (int i = 0; i < 10000000; i++)

{
    list.Add(new Model(i.ToString(), i);
}




StopWatch를 통해 시간을 카운트 해서 탐색 시간을 알아 보겠습니다.

멤버의 string 을 찾는 시간을 비교해 보죠.

검색 문자열은 0, 5000000, 10000000 이렇게 아이템이 위치한 순서를 변경하면서 탐색해 볼게요

1. “0” 찾기

for : 0.0785 ms

foreach : 0.0029 ms

linq : 0.175

2. “5000000” 찾기

for : 51.525 ms

foreach : 61.8936 ms

linq : 60.896 ms

3. 10000000 찾기

for : 80.3039

foreach : 92.62

linq : 105.6988

그리고 int 탐색결과 입니다.

1. 0 찾기

for : 0.0734 ms

foreach : 0.0042 ms

linq : 0.0461

2. 5000000 찾기

for : 38.1156 ms

foreach : 35.5985 ms

linq : 44.3418 ms

3. 10000000 찾기

for : 72.1454

foreach : 71.5293

linq : 78.6803

 

결과를 보면 단위가 ms인걸 가만하면 차이가 거의 안난다라고 볼수 있습니다.

대략적인 순위를 매긴다면,

평균적으로 종합해 보면

1. for

2. foreach

3. linq

 

너무 단순한 비교라서 성능차이가 거의 안보이는게 아쉽지만 그래도 for문은 모두에서 foreach, linq에 비해서 빠른걸 확인 할 수 있었습니다.

하지만 코드의 편의성을 생각한다면 저 위의 수치는 무시될 정도의 수치인걸 가만하면

자기가 구현시 편한 코드로 작성하면 될것 같습니다.

다음기회에 좀더 복작한 알고리즘으로 테스트 해보고 싶긴 하네요 !!

감사합니다.

반응형

댓글