Подтвердить что ты не робот

Как мы можем легко выполнять вызовы функций в эликсире?

Как мы можем легко время выполнять вызовы функций в Elixir?

Есть ли скрытый переключатель в IEx, чтобы включить это?

4b9b3361

Ответ 1

Вы можете написать модуль 1 который может измерять заданную функцию. Следующая функция возвращает время выполнения заданной функции в секундах:

defmodule Benchmark do
  def measure(function) do
    function
    |> :timer.tc
    |> elem(0)
    |> Kernel./(1_000_000)
  end
end

Используйте его следующим образом:

iex> Benchmark.measure(fn -> 123456*654321 end)
9.0e-6

Если вы хотите использовать это для бенчмаркинга, тогда есть еще один ответ.

Лучшим подходом, чем измерение времени выполнения одиночного запуска, является измерение операций за каждый таймфрейм. Это требует проверки кода и повторяет его в течение заданного периода времени. Эта методика дает более точные результаты.

Существует библиотека под названием Benchwarmer, которую вы можете использовать для этого:

Добавьте Benchwarmer к вашему mix.exs

def deps do
  [ { :benchwarmer, "~> 0.0.2" } ]
end

Просто выполните встроенную функцию:

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{...}]