Ove*_*ryd 53
您可以编写一个可以测量给定函数的模块1.以下函数以秒为单位返回给定函数的运行时:
defmodule Benchmark do
def measure(function) do
function
|> :timer.tc
|> elem(0)
|> Kernel./(1_000_000)
end
end
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
iex> Benchmark.measure(fn -> 123456*654321 end)
9.0e-6
Run Code Online (Sandbox Code Playgroud)
如果您想将其用于基准测试,那么还有另一个答案.
比测量单次运行执行时间更好的方法是测量每个时间帧的操作.这将获取测试中的代码并在给定的时间范围内重复执行它.该方法产生更准确的结果.
你可以使用一个名为Benchwarmer的库:
将Benchwarmer添加到您的 mix.exs
def deps do
[ { :benchwarmer, "~> 0.0.2" } ]
end
Run Code Online (Sandbox Code Playgroud)
只需传递内联函数:
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{...}]
Run Code Online (Sandbox Code Playgroud)
小智 17
这是对一个6年前的问题的回答。但我在寻找这样的功能时遇到了这个主题,并且模块建议暗示人们可以这样做:
{time, your_func_result} = :timer.tc(&your_func/arity, [your_func-args])
Run Code Online (Sandbox Code Playgroud)
我想我会把它放在这里,以防其他人最终搜索到这个。毕竟下面是Erlang。因此,您不必在模块等中定义另一个函数。时间以微秒为单位。
| 归档时间: |
|
| 查看次数: |
12530 次 |
| 最近记录: |