AverageTimer32/64 당신이 수행하는 모든 측정치의 평균을 계산하지 않습니다. 대신 측정 한 작업 수에 대한 측정 값을 제공합니다.
기본적으로 코드의 문제는 측정을 수행 할 때마다 새 타이머를 사용한다는 것입니다.
AverageTimer의 작동 방식을 이해하려면 해당 수식을 이해하는 것이 도움이 될 수 있습니다. 이것은 AverageTimer를 사용하기 위해 AverageBase가 필요한 이유에 대해서도 대답합니다. 1 - (AverageTimer)
((N1 - N0)/F)/(B1 - B0)
시간 t (AverageTimer)에서
- N1 현재 판독
- N0 t에서, 이전 판독으로 :
AverageTimer 공식은 다음과 같다
- 현재 카운터가 t 일 때 (평균 기준)
- 일 때 카운터가 t - 1 (Average Base)
- F 인자는 진드기/초 요컨대
포뮬러 틱 현재 시간을 취하고 이전 감산을 산출한다. 결과를 인수 F로 나눈 값은 t-1에서 마지막으로 측정 한 이후의 작업 실행 시간을 나타냅니다.
이제 이것을 현재 카운터에서 카운터를 뺀 값으로 나눕니다. 이것은 대개 하나 일 수 있습니다. 결과적으로 하나의 측정에 대한 작업의 평균 시간이 확보됩니다.
이제 AverageBase를 사용하여 다양한 측정 포인트를 건너 뛸 수 있습니다. 카운터를 10 번째 작업마다 매번 설정할 수 있다고 생각하십시오. 마지막 측정 이후에 10 회의 모든 작업에 대해 AverageTimer를 새 시간 측정 값만큼 증가 시키지만 AverageBase는 10만큼 증가시킵니다. 결국, 한 번의 작업에 대한 평균 시간이 표시됩니다 (10 번의 작업 호출을 모두 측정 한 경우에도 마찬가지 임).
코드 예제를 보면 항상 타이머 시작부터 타이머 끝까지의 차이점을 보냅니다. AverageBase를 1 씩 증가시키면서 이것을 10, 9, 8, 7, 6과 같은 일련의 숫자로 보겠습니다.다음과 같은 결과가 나타납니다 알고있는 두 번째 측정을 위해
:
(9-10)를/F/(10) = -1/F F는 단순 1 인으로/1
결과가 -1이됩니다. 그러나 제출
올바른 값
40 다시 같은 예는 우리가 얻을
10, 19, 27, 34, 있어야
(19 - 10)/F/(1 - 0) = 9/F/1
다시 F를 1로 설정하면 조작에 소요되는 평균 시간은 9입니다. 알 수 있듯이 AverageTimer가 제대로 작동하려면 측정 된 다음 값이 이전 값보다 커야합니다.
예에서 글로벌 스톱워치를 사용할 수 있습니다. 새로운 것을 시작하는 대신 Restart()가 아닌 Start()를 사용하십시오. 위에 표시된 것처럼 카운터는 내부적으로 시간의 차이를 계산합니다. 그렇게하면 올바른 측정 값을 얻을 수 있습니다.
0으로가는 것도 의미가 있습니다. 테스트 나 프로그램이 끝나면 카운터가 닫히고 더 이상 값을 제공하지 않습니다. 카운터에서 Close() 메서드를 호출하여 수동으로 수행 할 수 있습니다.
소크라테스 : 증가하지 않은 평균은 얼마입니까? –
죄송합니다. 나는 그 질문을받지 못했습니다. 아마도 내가 잘못된 카운터를 사용하고 있습니까? 내가 가진 요구 사항으로 초기 코드를 업데이트했습니다. –
마지막 측정 이후의 평균 지속 시간입니다. 로깅을하지 않으면 평균 지속 시간이 정의되지 않았으므로 (0으로 단순화 됨) 0이됩니다. – Guvante