measureTimeMillis în Kotlin

Comparare și timp Kotlin 1.0

Măsoară cât durează un bloc de cod: measureTimeMillis dă milisecunde (Long), measureTime dă un Duration.

Sintaxă
inline fun measureTimeMillis(block: () -> Unit): Long
inline fun measureTime(block: () -> Unit): Duration

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: measureTimeMillis este în kotlin.system, measureTime în kotlin.time; fără import nu 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ă.