안녕하세요. 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 단위로 가지고 있는 필드 입니다.
그럼 간단예시를 한번 볼까요?
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)
이번엔 Stopwatch 클래스의 IsRunning 필드를 이용해서 시간 측정 중인지를 체크해보았고
Restart() 메서드를 이용해서 시간 측정을 다시 시작해보기도 했습니다.
2-2) Stopwatch 시간 측정 방법 (StartNew)
Stopwatch sw = new Stopwatch() 를 이용해서 인스턴스를 생성하고 Start 를 이용해서 스탑워치를 실행할 수도 있지만,
이 예제에서 나온것 처럼
Stopwatch sw = Stopwatch.StartNew() 를 이용해서 인스턴스 생성과 동시에 Start를 해주는 static 메서드를 이용할 수 도 있습니다.
IsRunning 필드를 이용해서 확인해보면 Stop을 호출하기 전까지 True 인 것을 알 수 있습니다.
또한 sw.Elapsed, sw.ElapsedMilliseconds, sw.ElapsedTicks 필드를 출력해보면 각각 포멧에 맞게 시간을 출력하는 것을 알 수 있습니다.
이상으로 오늘은 씨샵에서 시간을 측정할 수 있는 Stopwatch 클래스에 대해서 알아보았습니다.
감사합니다.
'<개인공부> > [C#]' 카테고리의 다른 글
[C#] in 매개변수 한정자 설명 및 예제 (in 키워드) (5) | 2022.10.29 |
---|---|
[C#] ref 매개변수 한정자 설명 및 에제 (ref 키워드) (0) | 2022.10.22 |
[C#] 확장 메서드 (Extension Method) 설명과 예제 (0) | 2022.10.15 |
[C#] Equals, ==, ReferenceEquals 비교 및 설명 (0) | 2022.10.08 |
[C#] const, readonly 설명 사용법과 차이점에 대해서 (0) | 2022.09.22 |
[C#] 타입 조사 Type, 리플렉션(reflection) (0) | 2022.09.11 |
[C#] 인덱서 객체(인스턴스)를 배열 처럼 사용해보자 (0) | 2022.09.04 |
[C#] Math.Clamp 메서드(함수) 설명 및 예제 (0) | 2022.07.18 |