[C# 벤치마크] 벤치마크 닷넷 static 메서드 성능 측정하기
- C#
- 2022. 5. 3. 20:48
목적
- 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
'C#' 카테고리의 다른 글
[C# AutoMapper] AutoMapper 란? (0) | 2022.05.05 |
---|---|
[C#] FluentFTP 샘플 프로그램 작성 (클린 아키텍처 적용) (0) | 2022.05.03 |
[C#] ASP.NET Core FluentValidation.AspNetCore .NET 사용법 (0) | 2022.04.21 |
[C#] Fluent Validation 이란? (0) | 2022.04.21 |
[C#] Polly Nuget 패키지 - Bulkhead Isolation, Rate-Limit (0) | 2022.04.20 |
이 글을 공유하기