Skip to content

Instantly share code, notes, and snippets.

@tony612
Last active July 22, 2019 06:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tony612/9c94909b178b5156db270fbd6408acf3 to your computer and use it in GitHub Desktop.
Save tony612/9c94909b178b5156db270fbd6408acf3 to your computer and use it in GitHub Desktop.
Bench pattern match with functions
defmodule Foo do
Enum.each(1..100, fn i ->
def field(unquote(:"foo#{i}")) do
"field #{unquote(i)}"
end
def unquote(:"field_foo#{i}")() do
"field #{unquote(i)}"
end
end)
end
Benchee.run(
%{
"pattern match" => fn ->
Foo.field(:foo1)
Foo.field(:foo2)
Foo.field(:foo3)
Foo.field(:foo4)
Foo.field(:foo5)
Foo.field(:foo6)
Foo.field(:foo7)
Foo.field(:foo8)
Foo.field(:foo9)
Foo.field(:foo10)
Foo.field(:foo11)
Foo.field(:foo12)
Foo.field(:foo13)
Foo.field(:foo14)
Foo.field(:foo15)
Foo.field(:foo16)
Foo.field(:foo17)
Foo.field(:foo18)
Foo.field(:foo19)
Foo.field(:foo20)
Foo.field(:foo21)
Foo.field(:foo22)
Foo.field(:foo23)
Foo.field(:foo24)
Foo.field(:foo25)
Foo.field(:foo26)
Foo.field(:foo27)
Foo.field(:foo28)
Foo.field(:foo29)
Foo.field(:foo30)
Foo.field(:foo31)
Foo.field(:foo32)
Foo.field(:foo33)
Foo.field(:foo34)
Foo.field(:foo35)
Foo.field(:foo36)
Foo.field(:foo37)
Foo.field(:foo38)
Foo.field(:foo39)
Foo.field(:foo40)
Foo.field(:foo41)
Foo.field(:foo42)
Foo.field(:foo43)
Foo.field(:foo44)
Foo.field(:foo45)
Foo.field(:foo46)
Foo.field(:foo47)
Foo.field(:foo48)
Foo.field(:foo49)
Foo.field(:foo50)
Foo.field(:foo51)
Foo.field(:foo52)
Foo.field(:foo53)
Foo.field(:foo54)
Foo.field(:foo55)
Foo.field(:foo56)
Foo.field(:foo57)
Foo.field(:foo58)
Foo.field(:foo59)
Foo.field(:foo60)
Foo.field(:foo61)
Foo.field(:foo62)
Foo.field(:foo63)
Foo.field(:foo64)
Foo.field(:foo65)
Foo.field(:foo66)
Foo.field(:foo67)
Foo.field(:foo68)
Foo.field(:foo69)
Foo.field(:foo70)
Foo.field(:foo71)
Foo.field(:foo72)
Foo.field(:foo73)
Foo.field(:foo74)
Foo.field(:foo75)
Foo.field(:foo76)
Foo.field(:foo77)
Foo.field(:foo78)
Foo.field(:foo79)
Foo.field(:foo80)
Foo.field(:foo81)
Foo.field(:foo82)
Foo.field(:foo83)
Foo.field(:foo84)
Foo.field(:foo85)
Foo.field(:foo86)
Foo.field(:foo87)
Foo.field(:foo88)
Foo.field(:foo89)
Foo.field(:foo90)
Foo.field(:foo91)
Foo.field(:foo92)
Foo.field(:foo93)
Foo.field(:foo94)
Foo.field(:foo95)
Foo.field(:foo96)
Foo.field(:foo97)
Foo.field(:foo98)
Foo.field(:foo99)
Foo.field(:foo100)
end,
"function" => fn ->
Foo.field_foo1
Foo.field_foo2
Foo.field_foo3
Foo.field_foo4
Foo.field_foo5
Foo.field_foo6
Foo.field_foo7
Foo.field_foo8
Foo.field_foo9
Foo.field_foo10
Foo.field_foo11
Foo.field_foo12
Foo.field_foo13
Foo.field_foo14
Foo.field_foo15
Foo.field_foo16
Foo.field_foo17
Foo.field_foo18
Foo.field_foo19
Foo.field_foo20
Foo.field_foo21
Foo.field_foo22
Foo.field_foo23
Foo.field_foo24
Foo.field_foo25
Foo.field_foo26
Foo.field_foo27
Foo.field_foo28
Foo.field_foo29
Foo.field_foo30
Foo.field_foo31
Foo.field_foo32
Foo.field_foo33
Foo.field_foo34
Foo.field_foo35
Foo.field_foo36
Foo.field_foo37
Foo.field_foo38
Foo.field_foo39
Foo.field_foo40
Foo.field_foo41
Foo.field_foo42
Foo.field_foo43
Foo.field_foo44
Foo.field_foo45
Foo.field_foo46
Foo.field_foo47
Foo.field_foo48
Foo.field_foo49
Foo.field_foo50
Foo.field_foo51
Foo.field_foo52
Foo.field_foo53
Foo.field_foo54
Foo.field_foo55
Foo.field_foo56
Foo.field_foo57
Foo.field_foo58
Foo.field_foo59
Foo.field_foo60
Foo.field_foo61
Foo.field_foo62
Foo.field_foo63
Foo.field_foo64
Foo.field_foo65
Foo.field_foo66
Foo.field_foo67
Foo.field_foo68
Foo.field_foo69
Foo.field_foo70
Foo.field_foo71
Foo.field_foo72
Foo.field_foo73
Foo.field_foo74
Foo.field_foo75
Foo.field_foo76
Foo.field_foo77
Foo.field_foo78
Foo.field_foo79
Foo.field_foo80
Foo.field_foo81
Foo.field_foo82
Foo.field_foo83
Foo.field_foo84
Foo.field_foo85
Foo.field_foo86
Foo.field_foo87
Foo.field_foo88
Foo.field_foo89
Foo.field_foo90
Foo.field_foo91
Foo.field_foo92
Foo.field_foo93
Foo.field_foo94
Foo.field_foo95
Foo.field_foo96
Foo.field_foo97
Foo.field_foo98
Foo.field_foo99
Foo.field_foo100
end
},
time: 30,
memory_time: 2
)
mix run bench_pattern.exs
Operating System: macOS
CPU Information: Intel(R) Core(TM) i7-8850H CPU @ 2.60GHz
Number of Available Cores: 12
Available memory: 16 GB
Elixir 1.8.2
Erlang 22.0.5
Benchmark suite executing with the following configuration:
warmup: 2 s
time: 20 s
memory time: 2 s
parallel: 1
inputs: none specified
Estimated total run time: 48 s
Benchmarking function...
Benchmarking pattern match...
Name ips average deviation median 99th %
function 98.19 K 10.18 μs ±220.74% 10 μs 23 μs
pattern match 79.71 K 12.55 μs ±152.16% 12 μs 24 μs
Comparison:
function 98.19 K
pattern match 79.71 K - 1.23x slower
Memory usage statistics:
Name Memory usage
function 4.70 KB
pattern match 4.70 KB - 1.00x memory usage
**All measurements for memory usage were the same**
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment