For문과 Linq 중에 , 자료 구조마다 속도가 조금씩 다르다는 것은 쉽게 찾아 볼 수 있다.
배열로 했을 때, For => Foreach => Linq 순으로 빠르게 처리되었다.
그런데, 어느 시점에서 얼만큼 유의미한 차이가 있는지 궁금해졌다.
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,000개 기준
리스트 10,000개 기준
리스트 30,000개 기준
리스트 100,000개 기준
참고 링크를 보면 .Net7 부터는 Linq의 속도가 비약적으로 빠르다는 것을 알 수 있다.
현재 유니티는 .Net 7을 지원하지 않는다.
유니티 .Net 버전에 관한 쓰레드