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?

23
demandé sur Charles Okwuagwu 2015-04-16 10:55:42

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{...}]
41
répondu Overbryd 2016-10-19 12:38:48