Comment Pouvons-nous facilement chronométrer les appels de fonction dans elixir?
Comment Pouvons-nous facilement les appels de fonction dans Élixir?
y a-t-il un interrupteur caché dans IEx pour permettre cela?
1 réponses
Vous pouvez écrire un module1 qui peut mesurer une fonction donnée. La fonction suivante renvoie l'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
l'Utiliser comme ceci:
iex> Benchmark.measure(fn -> 123456*654321 end)
9.0e-6
si vous voulez utiliser cela pour L'analyse comparative, alors il y a une autre réponse.
une meilleure approche que la mesure du temps d'exécution d'un seul cycle consiste à mesurer les opérations par période. Ceci prend le code sous test et l'exécute de façon répétée dans un calendrier. Cette méthodologie, les rendements des résultats plus précis.
Il y a une bibliothèque appelée Benchwarmer vous pouvez utiliser pour cela:
ajouter 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 repris de http://www.littlelines.com/blog/2014/06/27/elixir-vs-ruby-showdown-part-one/
- une autre bibliothèque de référence appelée Benchfella https://github.com/alco/benchfella