Ce face Stopwatch
Stopwatch măsoară cât timp trece între două momente din program, de exemplu cât durează o funcție. Un cronometru nou este oprit și arată zero. start() îl pornește, stop() îl oprește, iar timpul se citește cu elapsed sau elapsedMilliseconds.
Poți porni și opri cronometrul de mai multe ori: timpul se adună, ca la un cronometru de sport. isRunning spune dacă este pornit. Un apel start() pe un cronometru deja pornit nu face nimic. Pentru a-l aduce la zero folosește reset().
Spre deosebire de diferența a două DateTime.now(), Stopwatch folosește un ceas care nu sare când se schimbă ora sistemului. Timpii măsurați diferă de la o rulare la alta, așa că exemplele de mai jos afișează doar fapte stabile sau au rezultatul scris de mână.
Ce returnează
start, stop: nimic. isRunning: un bool.
Exemple
Exemplul 1: Pornire, oprire și isRunning
sleep din dart:io oprește programul 50 ms, deci cronometrul măsoară sigur cel puțin atât.
import 'dart:io';
void main() {
var sw = Stopwatch();
print(sw.isRunning);
print(sw.elapsedMilliseconds);
sw.start();
print(sw.isRunning);
sleep(Duration(milliseconds: 50));
sw.stop();
print(sw.isRunning);
var dupaStop = sw.elapsedMicroseconds;
sleep(Duration(milliseconds: 20));
print(sw.elapsedMicroseconds == dupaStop);
print(sw.elapsedMilliseconds >= 50);
}
Rezultat
false
0
true
false
true
true
Exemplul 2: Cât durează o funcție
Timpul diferă la fiecare rulare și de la un calculator la altul; mai jos este un exemplu de rezultat.
int fibonacci(int n) => n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2);
void main() {
var sw = Stopwatch()..start();
var rezultat = fibonacci(32);
sw.stop();
print('fibonacci(32) = $rezultat');
print('Calculat în ${sw.elapsedMilliseconds} ms');
}
Rezultat posibil (diferă la fiecare rulare)
fibonacci(32) = 2178309
Calculat în 51 ms
Greșeli frecvente
- Creezi cronometrul și uiți să apelezi
start():elapsedrămâne zero. ScrieStopwatch()..start(). - Măsori o singură rulare a unui cod foarte rapid. Rezultatul este dominat de „zgomot”; repetă operația de multe ori și împarte timpul.
Comenzi înrudite
Stopwatch.elapsed: Timpul măsurat de cronometru: ca Duration (elapsed) sau ca număr de milisecunde (elapsedMilliseconds).Stopwatch.reset: Aduce timpul cronometrului la zero, fără să-l oprească sau să-l pornească.Duration: Un interval de timp (de exemplu 2 ore și 30 de minute), independent de calendar; Duration.zero este durata 0.DateTime.now: Creează un DateTime cu data și ora curente, în fusul orar local al calculatorului.