Stopwatch.elapsed în Dart

Timpul măsurat de cronometru: ca Duration (elapsed) sau ca număr de milisecunde (elapsedMilliseconds).

Sintaxă
Duration get elapsed
int get elapsedMilliseconds
int get elapsedMicroseconds

Ce face Stopwatch.elapsed

elapsed returnează timpul total măsurat ca Duration, pe care îl poți compara, aduna sau afișa. elapsedMilliseconds returnează același timp direct ca număr întreg de milisecunde, rotunjit în jos; pentru operații foarte rapide folosește elapsedMicroseconds.

Valorile se pot citi și cât timp cronometrul merge: fiecare citire dă timpul de până atunci, ca la „timpi intermediari”. După stop(), valoarea rămâne fixă.

Ce returnează

elapsed: un Duration. Celelalte: un int.

Exemple

Exemplul 1: Timpi intermediari

Afișăm doar comparații, care sunt aceleași la fiecare rulare.

import 'dart:io';

void main() {
  var sw = Stopwatch()..start();
  sleep(Duration(milliseconds: 30));
  var t1 = sw.elapsed;
  sleep(Duration(milliseconds: 30));
  var t2 = sw.elapsed;
  sw.stop();
  print(t1 >= Duration(milliseconds: 30));
  print(t2 > t1);
  print(sw.elapsedMilliseconds == sw.elapsed.inMilliseconds);
  print(sw.elapsedMicroseconds >= sw.elapsedMilliseconds * 1000);
}

Rezultat

true
true
true
true

Exemplul 2: Compararea a două metode

Concatenarea cu + față de StringBuffer. Timpii exacți diferă de la o rulare la alta.

void main() {
  const n = 20000;
  var sw = Stopwatch()..start();
  var s = '';
  for (var i = 0; i < n; i++) {
    s += 'x';
  }
  var timpPlus = sw.elapsed;

  sw
    ..reset()
    ..start();
  var sb = StringBuffer();
  for (var i = 0; i < n; i++) {
    sb.write('x');
  }
  var timpBuffer = sw.elapsed;
  print('Lungimi: ${s.length} și ${sb.length}');
  print('Cu +: ${timpPlus.inMicroseconds} µs');
  print('Cu StringBuffer: ${timpBuffer.inMicroseconds} µs');
}

Rezultat posibil (diferă la fiecare rulare)

Lungimi: 20000 și 20000
Cu +: 25766 µs
Cu StringBuffer: 5462 µs

Greșeli frecvente

  • Folosești elapsedMilliseconds pentru operații de sub o milisecundă și primești 0. Folosește elapsedMicroseconds sau repetă operația.

Comenzi înrudite

  • Stopwatch: Un cronometru pentru măsurarea timpului scurs; start() îl pornește, stop() îl oprește, isRunning spune dacă merge.
  • 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.
  • Duration.inDays: Dau durata întreagă exprimată într-o singură unitate: zile, ore, minute, secunde sau milisecunde (rotunjit spre zero).