.NET 7에서 TieredPGO 설정으로 성능향상 확인

.NET 7에서는 프로젝트 설정에 다음과 같이

<PropertyGroup>
...
  <TieredPGO>true</TieredPGO>
...
</PropertyGroup>

설정을 주면 간단히 동적 PGO를 활성화 할 수 있습니다. 이를 테스트 하기 위해 다음과 같은 간단한 프로그램을 작성했습니다.

// decimal로 1부터 100000000 까지 더하는 것으로 퍼포먼스 측정

using System.Diagnostics;


Test();
Thread.Sleep(2000);
Console.WriteLine();

Test();
Thread.Sleep(2000);
Console.WriteLine();

Test();
Thread.Sleep(2000);
Console.WriteLine();

Test();
Thread.Sleep(2000);
Console.WriteLine();

Test();

static void Test()
{
    var sum = 0m;

    var sw = Stopwatch.StartNew();
    for (var i = 1m; i <= 100000000m; i++)
        sum += i;
    var elpsedMs = sw.ElapsedMilliseconds;

    Console.WriteLine(sum);

    Console.WriteLine($"{elpsedMs} ms");

}

위의 설정 없이 돌리면 제 컴퓨터에서,

5000000050000000
1567 ms

5000000050000000
1511 ms

5000000050000000
1507 ms

5000000050000000
1506 ms

5000000050000000
1487 ms

대략 1500 ms 가 소요되는 것을 확인할 수 있는데요, 위의 설정을 활성화하면,

5000000050000000
1320 ms

5000000050000000
1269 ms

5000000050000000
1268 ms

5000000050000000
1269 ms

5000000050000000
1272 ms

대략 1280 ms 으로 17%의 성능 향상이 있다는 것을 확인했습니다. 이 참에 PublishAot 설정까지 해서 NativeAOT 성능도 확인해보았습니다.

<PropertyGroup>
...
  <PublishAot>true</PublishAot>
...
</PropertyGroup>
5000000050000000
1181 ms

5000000050000000
1180 ms

5000000050000000
1174 ms

5000000050000000
1180 ms

5000000050000000
1231 ms

오, 약간 더 빠르군요.

5개의 좋아요