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


89

다음을 사용하여 간단한 측정을한다고 가정 해 봅시다. 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 읽히 므로 비용이 들지 않습니다 .


1
Stop메서드는 Elapsed속성을 여러 번 평가하는 경우와 같이 부주의 한 실수를 방지합니다 .
Tim Schmelter 2014 년


타이머가 범위를 벗어 났는데 왜 전화를 걸어야한다고 생각 Stop합니까? 어쨌든 값을 사용할 수 없습니다
기본

답변:


81

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


4
그러나 부주의 한 실수를 방지하기 위해 어쨌든 사용하는 것이 좋습니다.
Tim Schmelter 2014-06-10

12
그것은 아무것도 막지 못합니다. 그는 메소드에서 스톱워치를 만들고 그것을 반환하지 않습니다. 그래서 그는 나중에 "실수"하기 위해 그것을 잡을 수 없을 것입니다.
Ronan Thibaudau 2014-06-10

21
또한 Stopwatch는 Start () 및 Stop () 호출 사이에 작업을 수행하거나 CPU 클록 사이클을 먹지 않습니다. Start ()는 타임 스탬프를 now로 설정하고 Stop ()은 그 이후로 경과 한 시간을 계산하고 저장합니다. coreclr : github.com/dotnet/corefx/blob/master/src/…의
Sammi

41

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

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

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

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

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


5

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


하지만 내 예에서는 필요하지 않습니다. :)
Dariusz

그런 다음 훌륭합니다. :), "only"를 사용해야합니다. 클래스는 Dispose 인터페이스를 구현하지 않으므로 정리가 트리거되지 않아야합니다.
vvv

2
@vvv 원하는 경우 답변에 추가 할 수 있습니다. 답변과 댓글 사이에 "수정"이라는 버튼이 있습니다.
기본적으로

0

코드를 계산할 필요가 없으면 Stop ()을 사용할 필요가 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.