C# For vs Linq 성능

Changhoony·2022년 12월 9일
0

들어가며...

For문과 Linq 중에 , 자료 구조마다 속도가 조금씩 다르다는 것은 쉽게 찾아 볼 수 있다.

배열로 했을 때, For => Foreach => Linq 순으로 빠르게 처리되었다.

그런데, 어느 시점에서 얼만큼 유의미한 차이가 있는지 궁금해졌다.

테스트 (Rider)

  1. 간단하게 Counting 하는 함수를 작성했다.
  2. BenchmarkDotNet을 참조하였다. (사용법은 여기를 참고하면 된다. * 주의 : 빌드 타입이 릴리즈여야 테스트 가능.)
  3. 테스트 코드
    length의 값만 1,000개, 10,000개, 30,000개, 100,000개로 나누어서 각각 테스트했다.
using System;
using System.Collections.Generic;
using System.Linq;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Order;

[MemoryDiagnoser()]
[Orderer(SummaryOrderPolicy.FastestToSlowest)]
[RankColumn()]
public class TestClass
{
    public static List<int> group = new(100000);
    public const int length = 10000;

    public void Init() 
    {
        group = Enumerable.Range(1, length).ToList();
    }
    [Benchmark()]
    public void TestLoopForCounter()
    {
        Init();
        var count = 0;
        for (var i = 0; i < length; i++)
        {
            if(group[i] > length / 2)
                count++;
        }
        Console.WriteLine(count);
    }
        
    [Benchmark()]
    public void TestLoopLinqCounter()
    {
        Init();
        var count = group.Count(x => x > length / 2);
        Console.WriteLine(count);
    }
}

결과

  1. 리스트 1,000개 기준

  2. 리스트 10,000개 기준

  3. 리스트 30,000개 기준

  4. 리스트 100,000개 기준

  • 유의미한 차이를 내는 시점은 최소 10,000개를 초과했을 경우 였다.

참고

  • 참고 링크를 보면 .Net7 부터는 Linq의 속도가 비약적으로 빠르다는 것을 알 수 있다.

  • 현재 유니티는 .Net 7을 지원하지 않는다.

  • 유니티 .Net 버전에 관한 쓰레드

profile
Unity 개발

0개의 댓글