Comment pouvons-nous facilement chronométrer les appels de fonction dans l'élixir?
Comment pouvons-nous facilement le temps appels de fonction dans Elixir?
Existe-t-il un commutateur caché dans IEx pour l'activer?
Vous pouvez écrire un module1 qui peut mesurer une fonction donnée. La fonction suivante renvoie le temps d'exécution d'une fonction donnée en secondes:
defmodule Benchmark do
def measure(function) do
function
|> :timer.tc
|> elem(0)
|> Kernel./(1_000_000)
end
end
Utilisez-le comme ceci:
iex> Benchmark.measure(fn -> 123456*654321 end)
9.0e-6
Si vous souhaitez l'utiliser pour l'analyse comparative, il existe une autre réponse.
Une meilleure approche que la mesure du temps d'exécution d'une exécution unique consiste à mesurer les opérations par période. Cela prend le code sous test et l'exécute de manière répétée dans un délai donné. Cette méthodologie donne des résultats plus précis.
Il existe une bibliothèque appelée Benchwarmer que vous pouvez utiliser pour cela:
Ajoutez Benchwarmer à votre mix.exs
def deps do
[ { :benchwarmer, "~> 0.0.2" } ]
end
Passez simplement une fonction en ligne:
iex> Benchwarmer.benchmark fn -> 123456*654321 end
*** #Function<20.90072148/0 in :erl_eval.expr/5> ***
1.2 sec 2M iterations 0.61 μs/op
[%Benchwarmer.Results{...}]
- [1]: Code extrait de http://www.littlelines.com/blog/2014/06/27/elixir-vs-Ruby-showdown-part-one/
- Benchee https://github.com/bencheeorg/benchee