c# 실행에 걸리는 시간을 재어보자..

함수나 머 쓰레드 내에서 그 함수 혹은 쓰레드가 한번 실행되는데 걸리는 시간이 필요한 경우가 가끔 아주 가끔 있습니다.
이 시간을 계산하기 위한 클래스를 만들어보았습니다.

이름하여

HyperDuration

ㅋㅋ



public class HyperDuration
{
       [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceCounter(out long lpPerformanceCount);

        [DllImport("Kernel32.dll")]
        private static extern bool QueryPerformanceFrequency(out long lpFrequency);

        private long m_startTime, m_stopTime;
        private long m_freq;
        public HyperDuration()
        {
            m_startTime = 0;
            m_stopTime = 0;
 
            if (QueryPerformanceFrequency(out m_freq) == false)
            {
                throw new Win32Exception();
            }
        }
        public void Start()
        {
            Thread.Sleep(0);
            QueryPerformanceCounter(out m_startTime);
        }

        public void Stop()
        {
            QueryPerformanceCounter(out m_stopTime);
        }
        public double Duration
        {
            get
            {
                return (double)(m_stopTime - m_startTime) / (double)m_freq;
            }
        }
}

각 함수는 아래와 같습니다.


BOOL WINAPI QueryPerformanceCounter(
  __out  LARGE_INTEGER *lpPerformanceCount
);

CPU의 Tick을 받아옵니다. 아마 보통 GetTickCount()를 사용할텐데 위의 함수는 더 정교한 숫자를 얻어올 수 있습니다.


BOOL WINAPI QueryPerformanceFrequency(
  __out  LARGE_INTEGER *lpFrequency
);

QueryPerformanceCounter 의 초당 진동수(주파수)를 얻어옵니닫.

Duration 값에 1000을 곱하면 ms 가 나오겠죠

.
.
.
.

다 알고있는 이야기였습니다..




쥐의 시점에서 본 고양이... 공포 최강..

댓글

이 블로그의 인기 게시물

c# GDI+ 꺼져!! BufferedGraphics

c# 에서 C++ dll 사용하기

c# string 에서 mfc의 LPCTSTR간의 변환