programing

방법이 끝날 때 스톱워치를 중지해야합니까?

nasanasas 2020. 11. 2. 08:03
반응형

방법이 끝날 때 스톱워치를 중지해야합니까?


다음을 사용하여 간단한 측정을한다고 가정 해 봅시다. Stopwatch

public void DoWork()
{
    var timer = Stopwatch.StartNew();
    // some hard work
    Logger.Log("Time elapsed: {0}", timer.Elapsed);
    timer.Stop(); // Do I need to call this?
}

MSDN에 따르면 :

일반적인 Stopwatch 시나리오에서는 Start 메서드를 호출 한 다음 결국 Stop 메서드를 호출 한 다음 Elapsed 속성을 사용하여 경과 시간을 확인합니다.

타이머 인스턴스에 더 이상 관심이 없을 때이 메서드를 호출해야하는지 잘 모르겠습니다. Stop방법을 사용하여 "정리"해야합니까 ?

편집하다

Logger.Log (..) 는 로거 로그 전에timer.Elapsed 읽히 므로 비용이 들지 않습니다 .


아니, 당신은 그것을 멈출 필요가 없습니다. Stop()경과 시간 추적을 중지합니다. 리소스를 확보하지 않습니다.


아니요, 중지하거나 정리할 필요가 없습니다.

Stopwatch관리되지 않는 리소스를 사용하지 않습니다 (을 생각한 경우 IDisposable). 실제로 사용하지 않는 모든 (물론, 객체 자체에 의해 사용되는 메모리에서 제외) 모두에서 자원을!

.NET (전체 .NET 프레임 워크, 모노, .NET 코어)의 창 구현, 그것은 바로 호출을 QueryPerformanceCounter()필요로 할 때 윈도우 API (에 Start()Stop()와 읽을 때 Elapsed) 고해상도 타임 스탬프를 검색 할 수 있습니다.

Mono 및 .NET Core의 Linux 구현에서는 clock_gettime함수를 사용 하여 단조 증가하는 시간 값을 검색합니다.

구현 세부 사항에 대한 실제 호기심이있는 모든 사람에게 : 이 게시물을 읽으십시오 .


Elapsed 값을 재사용하려면 Stop이 유용하다고 생각합니다.


//disposable StopWatch
internal class StopWatch :Stopwatch, IDisposable
{

    public StopWatch()
    {

        Start();

    }

    private string _name;

    public string Name
    {
        get => _name;
        set => _name = $"{value} ";
    }

    public void Dispose()
    {

        Stop();

        Debug.Print(string.Format("{0}RunTime {1:00}:{2:00}:{3:00}.{4:00}", Name, Elapsed.Hours, Elapsed.Minutes,Elapsed.Seconds, Elapsed.Milliseconds / 10));

    }

}

//Use example
internal class SomeClass
{

    private static void Some()
    {

        using (var stopWatch = new StopWatch())
        {

            // Do something
            for (int i = 0; i < 1000; i++)
            {
                Thread.Sleep(1);
            }

        }

    }

}

Elapased 시간을 얻기 전에 스톱워치를 중지해야합니다.

static void Main()
{
// Create new stopwatch
Stopwatch stopwatch = new Stopwatch();

// Begin timing
stopwatch.Start();

// Do something
for (int i = 0; i < 1000; i++)
{
    Thread.Sleep(1);
}

// Stop timing
stopwatch.Stop();

// Write result
Console.WriteLine("Time elapsed: {0}",
    stopwatch.Elapsed);
}

참고URL : https://stackoverflow.com/questions/24140261/should-i-stop-stopwatch-at-the-end-of-the-method

반응형