どうすれば簡単にtime Elixirの関数呼び出しを実行できますか?
これを可能にする隠しスイッチはIExにありますか?
モジュールを書くことができます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{...}]