[C# 벤치마크] IntroArrayParam 사용방법

소개

  • 안녕하세요. 오늘은 BenchMarkDotNet에 대해서 학습해 보려고 합니다.
  • 그 중에서도, IntroArrayParam 관련 내용에 대해서 알아 보도록 하겠습니다.

IntroArrayParam

  • [ArrayParam] 배열을 인수로 전달하여 벤치마크 성능을 테스트 할 수 있습니다.
  • 예제 코드를 통해서 보여 드리도록 하겠습니다.

예제코드

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<IntroArrayParam>();
        }
    }

    [MemoryDiagnoser]
    public class IntroArrayParam
    {
        [Benchmark]
        [ArgumentsSource(nameof(Data))]
        public int ArrayIndexOf(int[] array, int value)
        {
            return Array.IndexOf(array, value);
        }

        [Benchmark]
        [ArgumentsSource(nameof(Data))]
        public int ManualIndexOf(int[] array, int value)
        {
            for(int index =0; index < array.Length; index++)
            {
                if(array[index] == value)
                {
                    return index;
                }
            }

            return -1;
        }

        public IEnumerable<object[]> Data()
        {
            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 };
        }
    }
}

실행 결과

|        Method |      array | value |      Mean |     Error |    StdDev | Allocated |
|-------------- |----------- |------ |----------:|----------:|----------:|----------:|
|  ArrayIndexOf | Int32[100] |     4 | 12.386 ns | 0.0110 ns | 0.0091 ns |         - |
| ManualIndexOf | Int32[100] |     4 |  3.325 ns | 0.0078 ns | 0.0065 ns |         - |
|  ArrayIndexOf |   Int32[3] |     4 | 12.047 ns | 0.0411 ns | 0.0364 ns |         - |
| ManualIndexOf |   Int32[3] |     4 |  2.002 ns | 0.0187 ns | 0.0175 ns |         - |
|  ArrayIndexOf | Int32[100] |   101 | 72.539 ns | 0.2683 ns | 0.2510 ns |         - |
| ManualIndexOf | Int32[100] |   101 | 68.603 ns | 0.1868 ns | 0.1560 ns |         - |
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY