[C# 벤치마크] 벤치마크 닷넷 static 메서드 성능 측정하기

목적

  • C# 에서 성능 측정을 하기 위해서는 보통 BenchMarkDotNet 을 이용하여 성능 측정을 합니다.
  • 하지만, 종종 static 메서드를 성능 측정하고 싶은 경우도 있는데요.
  • 벤치마크 닷넷에서 static 메서드를 바로 성능 측정을 하려고 하면 에러가 발생합니다.
  • 하지만 해결방법이 있고, 그 해결방법에 대해서 글로 기록하려고 포스팅 하게 되었습니다.

static 메서드 성능 측정하기

  • 벤치마크 닷넷을 이용하여 static 메서드를 성능 측정하려면, 우선 성능 측정하려는 메서드를 포함하는 클래스 자체를 Static 클래스로 만들면 됩니다.
  • 그 다음으로 벤치마크 진행할 대상 클래스에서 Test 메서드를 생성 후, Static 메서드를 호출하여 성능을 측정하면 됩니다.
  • 예제를 통해서 어떻게 구현 하는지 보여 드리도록 하겠습니다.

예제코드

  • 아래와 같이 StaticClass 정적 클래스를 하나 선업합니다.
  • 다음으로 벤치마크를 진행할 static 메서드인 AppendStringUsingStringBuilderCache 메서드를 작성합니다.
  • 마지막으로 벤치마크 테스트 대상 클래스인 BenchMarkTest 클래스에서 StaticClass.AppendStringUsingStringBuilderCache(Count); 다음과 같이 정적 메서드를 호출하여 성능 측정을 진행하게 되면, 에러 없이 static 메서드를 성능 측정할 수 있습니다.
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Text;


var summary = BenchmarkRunner.Run<BenchMarkTest>();

[MemoryDiagnoser]
public class BenchMarkTest
{
    [Params(10, 100, 1000, 2000, 10000, 100000, 1000000)]
    public int Count { get; set; }


    [Benchmark]
    public void AppendStringUsingStringBuilder()
    {
        for(int index = 0; index < Count; index++)
        {
            var stringBuilder = new StringBuilder();
            stringBuilder.Append("First String");
            stringBuilder.Append("Second String");
            stringBuilder.Append("Third String");
            string value =  stringBuilder.ToString();
        }
    }

    [Benchmark]
    public void AppendStringUsingStringBuilderCache()
    {
        StaticClass.AppendStringUsingStringBuilderCache(Count);
    }
}

public static class StaticClass
{
    [Benchmark]
    public static void AppendStringUsingStringBuilderCache(int Count)
    {
        for (int index = 0; index < Count; index++)
        {
            StringBuilder stringBuilder = StringBuilderCache.Acquire();
            stringBuilder.Append("First String");
            stringBuilder.Append("Second String");
            stringBuilder.Append("Third String");
            string value = StringBuilderCache.GetStringAndRelease(stringBuilder);
        }
    }
}
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY