Ce face measureTimeMillis
measureTimeMillis { ... } (din kotlin.system) rulează blocul și returnează durata în milisecunde, ca Long. Este cea mai simplă metodă de a vedea dacă o bucată de cod este lentă. Mai există measureNanoTime, pentru nanosecunde.
measureTime { ... } (din kotlin.time, stabilă din Kotlin 1.9) returnează un Duration, care se afișează frumos (1.25s, 305ms) și se convertește ușor în alte unități. Dacă ai nevoie și de rezultatul blocului, folosește measureTimedValue.
Durata diferă la fiecare rulare și depinde de calculator. Pentru măsurători serioase, rulează codul de mai multe ori: prima rulare pe JVM este de obicei mai lentă.
Parametri
| Parametru | Descriere |
|---|---|
block: () -> Unit |
Codul măsurat. |
Ce returnează
measureTimeMillis: milisecundele scurse (Long). measureTime: un Duration.
Exemple
Exemplul 1: Durata unui calcul
Timpul exact diferă la fiecare rulare, de aceea rezultatul de mai jos este doar un exemplu.
import kotlin.system.measureTimeMillis
import kotlin.time.measureTime
fun main() {
var suma = 0L
val ms = measureTimeMillis {
for (i in 0 until 1_000_000) suma += i
}
println("Suma: $suma")
println("measureTimeMillis: $ms ms")
val durata = measureTime {
(1..1_000_000).map { it * 2 }.sum()
}
println("measureTime: $durata")
}
Rezultat posibil (diferă la fiecare rulare)
Suma: 499999500000
measureTimeMillis: 6 ms
measureTime: 4.102375ms
Exemplul 2: Verificarea unei așteptări
Blocul doarme cel puțin 200 ms, deci durata măsurată este sigur de cel puțin 200 ms. Afișăm doar comparația, care este mereu aceeași.
import kotlin.system.measureTimeMillis
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.measureTime
fun main() {
val ms = measureTimeMillis { Thread.sleep(200) }
println("Cel puțin 200 ms: ${ms >= 200}")
val durata = measureTime { Thread.sleep(150) }
println("Cel puțin 150 ms: ${durata >= 150.milliseconds}")
println("Sub 10 secunde: ${durata.inWholeSeconds < 10}")
}
Rezultat
Cel puțin 200 ms: true
Cel puțin 150 ms: true
Sub 10 secunde: true
Greșeli frecvente
- Uiți importul:
measureTimeMilliseste înkotlin.system,measureTimeînkotlin.time; fărăimportnu compilează. - Tragi concluzii dintr-o singură rulare. Prima rulare include încălzirea JVM-ului; repetă măsurătoarea.
Comenzi înrudite
Duration.inWholeSeconds: Transformă o durată într-un număr Long de secunde sau milisecunde întregi (restul se taie).Thread.sleep: Oprește programul (firul curent) pentru un număr dat de milisecunde, apoi continuă.