Pregunta

Quiero ver cuánto tarda en ejecutarse una función. ¿Cuál es la forma más fácil de hacer esto en PLT-Scheme? Idealmente, me gustaría poder hacer algo como esto:

> (define (loopy times)
  (if (zero? times)
      0
      (loopy (sub1 times)))) 
> (loopy 5000000)
0                      ;(after about a second)
> (timed (loopy 5000000))
Took: 0.93 seconds
0
> 

No importa si tengo que usar alguna otra sintaxis como (500,0000 de tiempo) o ('(loopy 5000000)) , o si devuelve el tiempo empleado en un contras o algo.

¿Fue útil?

Solución

El nombre estándar para sincronizar la ejecución de expresiones en la mayoría de las implementaciones de Esquema es " tiempo " ;. Aquí hay un ejemplo desde dentro de DrRacket.

  

(definir (tiempos locos)       (si (cero? veces)           0           (loopy (sub1 veces))))

     

(tiempo (5000000 loopy))   tiempo de CPU: 1526 tiempo real: 1657 gc tiempo: 0   0

Si usa el tiempo para comparar diferentes implementaciones entre sí, recuerde utilizar la raqueta desde la línea de comandos en lugar de realizar una evaluación comparativa en DrRacket (DrRacket inserta código de depuración para dar mejores mensajes de error).

Otros consejos

Lo encontré ...

De la en línea documentación :

  
      
  • (time-apply proc arg-list) invoca el procedimiento proc con los argumentos en arg-list. Se devuelven cuatro valores: una lista que contiene el (los) resultado (s) de aplicar proc, el número de milisegundos de tiempo de CPU requerido para obtener este resultado, el número de milisegundos "reales" requeridos para el resultado y el número de milisegundos de Tiempo de CPU (incluido en el primer resultado) empleado en la recolección de basura.
  •   

Ejemplo de uso:

> (time-apply loopy '(5000000))
(0)
621
887
0
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top