C#

간단한 메서드 실행 시간 측정기

코샵 2024. 7. 25. 14:44
반응형

애플리케이션 성능 최적화를 위해서는 메서드 실행 속도를 측정하는 것이 중요합니다. 이를 위해 간단한 Profiler 클래스를 만들어 보았습니다.

#region
using System;
using System.Diagnostics;
#endregion

public static class Profiler
{
    public static T Time<T>(Func<T> method, string methodName)
    {
       Stopwatch sw     = Stopwatch.StartNew();
       T         result = method();
       sw.Stop();
       Console.WriteLine($"{methodName}: {sw.Elapsed.TotalMilliseconds} ms");
       return result;
    }

    public static void Time(Action method, string methodName)
    {
       Stopwatch sw = Stopwatch.StartNew();
       method();
       sw.Stop();
       Console.WriteLine($"{methodName}: {sw.Elapsed.TotalMilliseconds} ms");
    }
}

Profiler 클래스에는 두 가지 주요 메서드가 있습니다:

  1. Time<T>(Func<T> method, string methodName):
    • 반환 값이 있는 메서드의 실행 시간을 측정합니다.
    • Func<T> 델리게이트 형식의 메서드를 인자로 받아 실행하고, 실행 시간을 측정합니다.
    • 메서드 이름을 문자열로 받아 실행 시간 출력 시 사용합니다.
    • 메서드 실행 결과를 반환합니다.
  2. Time(Action method, string methodName):
    • 반환 값이 없는 메서드의 실행 시간을 측정합니다.
    • Action 델리게이트 형식의 메서드를 인자로 받아 실행하고, 실행 시간을 측정합니다.
    • 메서드 이름을 문자열로 받아 실행 시간 출력 시 사용합니다.
    • 메서드 실행 결과는 반환하지 않습니다.

Profiler 클래스를 사용하면 간단하게 메서드의 실행 시간을 측정할 수 있습니다. 예를 들어 다음과 같이 사용할 수 있습니다:

// 반환 값이 있는 메서드 실행 시간 측정
int result = Profiler.Time(() => SomeMethod(10), "SomeMethod");

// 반환 값이 없는 메서드 실행 시간 측정 
Profiler.Time(() => AnotherMethod(), "AnotherMethod");

이렇게 메서드 실행 시간을 측정하면 애플리케이션 성능 향상을 위한 병목 지점을 쉽게 찾을 수 있습니다. 성능 개선이 필요한 메서드를 빠르게 식별하고 최적화할 수 있습니다.

Profiler 클래스는 매우 간단한 구현이지만, 실제 애플리케이션에서 유용하게 사용될 수 있습니다. 시간 측정 로직을 별도의 유틸리티 클래스로 분리함으로써 코드의 가독성과 재사용성을 높일 수 있습니다.