<개인공부>/[C#]

[C#] 실행 시간 측정, 코드 수행 시간 측정(Stopwatch)

BlockDMask 2022. 9. 25. 22:00

안녕하세요. BlockDMask 입니다.
오늘은 코드에서 수행시간이 궁금할 때, 이 로직은 얼마나 시간이 걸리는지 측정할 때
유용하게 쓸 수 있는 Stopwatch 클래스에 대해서 알아보려 합니다.

<목차>
1. C# Stopwatch 클래스 설명 및 내부 살펴보기
2. C# Stopwatch 실제 시간 측정 예제

 

1. C# 코드 수행 시간 측정 Stopwatch 클래스 설명

우리가 개발을 하다보면 실제로 유저에게 걸린 시간을 보여주어야 할 때도 있고, 내가 짠 로직이 얼마나 시간을 소모하는지 등등 시간을 측정해야하는 경우가 많습니다.
C#에서는 정말 편하게 시간 측정을 할 수 있는 Stopwatch 클래스가 존재합니다.

우선 Stopwatch 클래스는 System.Diagnostics 네임스페이스 안에 존재합니다.
using System.Diagnostics; 를 선언해주면 편리하게 사용할 수 있겠죠?

Stopwatch에는 여러가지 필드와 메서드가 존재하는데 2가지 버전으로 나누어서 설명을 드리겠습니다.
인스타 유튜브도 숏버전이 유행이니 숏버전과 풀버전으로 나누어 설명해보겠습니다.

 

1-1) Stopwatch 클래스 간단 사용하기

Stopwatch 클래스를 간단하게 사용하려면 딱 3가지만 알면 됩니다.
Start(), Stop(), ElapsedMilliseconds 이렇게 입니다.

Start() 메서드는 시간 측정을 시작하는 메서드이고
Stop() 메서드는 시간 측정을 멈추는 메서드 입니다.
ElapsedMilliseconds는 Start와 Stop 후 사이에 측정한 시간을 ms 단위로 가지고 있는 필드 입니다.
그럼 간단예시를 한번 볼까요?

C# stopwatch 1

Stopwatch sw = new Stopwatch();
우선 스탑워치 클래스의 인스턴스를 생성해 줍니다.

그 후에 측정하고자 하는 블럭 시작 전에 sw.Start() 메서드를 이용해서 스탑워치 버튼늘 꾹 눌러서 시작하고
측정하고자 하는 로직이 끝난 부분에 sw.Stop() 메서드를 작성해 줍니다.

그리고 이 측정한 시간은  sw.ElaspedMilliseconds 필드를 이용해서 가지고 올 수 있습니다.

Thread.Sleep은 프로그램을 잠시 재우는 메서드라 생각하면 됩니다.
시간 측정을 위해 2200을 넣어서 2.2초 정도 프로그램을 재웠습니다.

 

1-2) Stopwatch 클래스 내부에 있는 필드와 메서드를 살펴보기

실제 사용할때는 1-1) 에서 소개한 메서드와 필드로만 간단하게 사용할 수 있습니다.
그래도 클래스 내부는 한번 살펴보는게 좋겠죠?

필드

public TimeSpan Elapsed {get;}  // 현재 인스턴스가 측정한 총 시간 
public long ElapsedMilliseconds {get;}  // 현재 인스턴스가 측정한 ms 단위의 총 시간
public long ElapsedTicks {get;} // 현재 인스턴스가 측정한 경과시간(tick) 수
public bool IsRunning {get;}      // Stopwatch 타이머가 실행중인지 확인

 

메서드

public static Stopwatch StartNew() //새 Stopwatch 인스턴스 초기화 한 후에 경과 0으로 세팅하고, 시간 측정 시작 (인스턴스 세팅 후 Start or Restart 와 동일)
public void Start()    //시간 측정을 시작 합니다.
public void Reset()   // 시간 측정을 중지하고 내부에 저장한 경과 시간을 0으로 세팅
public void Restart() // 시간 측정을 중지하고 내부 경과 시간을 0으로 세팅 한 후에 다시 시간 측정 시작
public void Stop()     // 시간 측정 중지

 

 

2. 실행 시간 측정 예제 (feat. Stopwatch)

2-1) Stopwatch 시간 측정 방법 (Start)

C# stopwatch 2

이번엔 Stopwatch 클래스의 IsRunning 필드를 이용해서 시간 측정 중인지를 체크해보았고
Restart() 메서드를 이용해서 시간 측정을 다시 시작해보기도 했습니다.

 

2-2) Stopwatch 시간 측정 방법 (StartNew)

C# stopwatch 3

Stopwatch sw = new Stopwatch() 를 이용해서 인스턴스를 생성하고 Start 를 이용해서 스탑워치를 실행할 수도 있지만,
이 예제에서 나온것 처럼
Stopwatch sw = Stopwatch.StartNew() 를 이용해서 인스턴스 생성과 동시에 Start를 해주는 static 메서드를 이용할 수 도 있습니다.

IsRunning 필드를 이용해서 확인해보면 Stop을 호출하기 전까지 True 인 것을 알 수 있습니다.

또한 sw.Elapsed, sw.ElapsedMilliseconds, sw.ElapsedTicks 필드를 출력해보면 각각 포멧에 맞게 시간을 출력하는 것을 알 수 있습니다.

 

이상으로 오늘은 씨샵에서 시간을 측정할 수 있는 Stopwatch 클래스에 대해서 알아보았습니다.
감사합니다.