web-dev-qa-db-ja.com

elixirで関数呼び出しを簡単に時間計測するにはどうすればよいですか?

どうすれば簡単にtime Elixirの関数呼び出しを実行できますか?

これを可能にする隠しスイッチはIExにありますか?

29

モジュールを書くことができます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{...}]
51
Overbryd