[C# 벤치마크] IntroCategories 사용방법
- C#/C# 문법
- 2021. 12. 29. 19:03
소개
- 안녕하세요. 오늘은 BenchMarkDotNet에 대해서 학습해 보려고 합니다.
- 그 중에서도, IntroCategories 관련 내용에 대해서 알아 보도록 하겠습니다.
IntroCategories
- [BenchmarkCategory] 속성과 함께 사용 하면 벤치마크를 범주로 그룹화하고 범주별로 필터링 할 수 있습니다.
- 예제 코드를 통해서 어떻게 Category를 지정하는지 알아보겠습니다.
예제코드
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System;
using System.Collections.Generic;
using System.Linq;
namespace BenchMarkTest
{
class Program
{
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<IntroCategories>();
}
}
[DryJob]
[CategoriesColumn]
[BenchmarkCategory("Awesome")]
[AnyCategoriesFilter("A", "1", "2")]
public class IntroCategories
{
[Benchmark]
[ArgumentsSource(nameof(DataA))]
[BenchmarkCategory("A", "1")]
public int ArrayIndexOfA(int[] array, int value)
{
return Array.IndexOf(array, value);
}
[Benchmark]
[ArgumentsSource(nameof(DataA))]
[BenchmarkCategory("A", "2")]
public int ManualIndexOfA(int[] array, int value)
{
for (int index = 0; index < array.Length; index++)
{
if (array[index] == value)
{
return index;
}
}
return -1;
}
[Benchmark]
[ArgumentsSource(nameof(DataB))]
[BenchmarkCategory("B", "1")]
public int ArrayIndexOfB(int[] array, int value)
{
return Array.IndexOf(array, value);
}
[Benchmark]
[ArgumentsSource(nameof(DataB))]
[BenchmarkCategory("B", "2")]
public int ManualIndexOfB(int[] array, int value)
{
for (int index = 0; index < array.Length; index++)
{
if (array[index] == value)
{
return index;
}
}
return -1;
}
public IEnumerable<object[]> DataA()
{
yield return new object[] { new int[] { 1, 2, 3, }, 4 };
yield return new object[] { Enumerable.Range(0, 100).ToArray(), 4 };
yield return new object[] { Enumerable.Range(0, 100).ToArray(), 101 };
}
public IEnumerable<object[]> DataB()
{
yield return new object[] { new int[] { 1, 2, 3, }, 4 };
yield return new object[] { Enumerable.Range(0, 100).ToArray(), 4 };
yield return new object[] { Enumerable.Range(0, 100).ToArray(), 101 };
}
}
}
실행 결과
- 현재 카테고리 필터가 "A", "1", "2" 라고 지정되어 있기 때문에, A_1, A_2, B_1, B_2 모두 필터에 검색되어 벤치마크 실행된 것을 확인할 수 있습니다.
| Method | Categories | array | value | Mean | Error |
|--------------- |------------ |----------- |------ |---------:|------:|
| ArrayIndexOfA | A,1,Awesome | Int32[100] | 4 | 288.0 us | NA |
| ManualIndexOfA | A,2,Awesome | Int32[100] | 4 | 303.9 us | NA |
| ArrayIndexOfB | B,1,Awesome | Int32[100] | 4 | 265.2 us | NA |
| ManualIndexOfB | B,2,Awesome | Int32[100] | 4 | 283.0 us | NA |
| ArrayIndexOfA | A,1,Awesome | Int32[3] | 4 | 261.7 us | NA |
| ManualIndexOfA | A,2,Awesome | Int32[3] | 4 | 282.7 us | NA |
| ArrayIndexOfB | B,1,Awesome | Int32[3] | 4 | 273.7 us | NA |
| ManualIndexOfB | B,2,Awesome | Int32[3] | 4 | 300.8 us | NA |
| ArrayIndexOfA | A,1,Awesome | Int32[100] | 101 | 274.3 us | NA |
| ManualIndexOfA | A,2,Awesome | Int32[100] | 101 | 310.4 us | NA |
| ArrayIndexOfB | B,1,Awesome | Int32[100] | 101 | 289.0 us | NA |
| ManualIndexOfB | B,2,Awesome | Int32[100] | 101 | 288.8 us | NA |
728x90
'C# > C# 문법' 카테고리의 다른 글
[C# NuGet] C# 유효성 검증 FluentValidation NuGet 사용 방법 (0) | 2022.01.05 |
---|---|
[C# 벤치마크] IntroArrayParam 사용방법 (0) | 2021.12.29 |
[C# 문법] 파일 경로에서 디렉토리 경로 가져오기 (0) | 2021.12.29 |
[C# 문법] 예외 필터 사용방법 (0) | 2021.12.28 |
[C# 문법] 사용자 지정 예외 클래스 만들기 (0) | 2021.12.27 |
이 글을 공유하기