Created
February 17, 2017 13:49
-
-
Save ahamez/7400785cc21e74d944987a1352a734e0 to your computer and use it in GitHub Desktop.
Benchmarks different struct creations
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| defmodule Struct do | |
| defstruct [:a, :b, :c, :d, :e, :f, :g, :h] | |
| end | |
| defmodule CreateStruct do | |
| def create1() do | |
| struct(Struct, create1_fields()) | |
| end | |
| def create3() do | |
| struct!(Struct, create1_fields()) | |
| end | |
| defp create1_fields() do | |
| create1_h([]) | |
| end | |
| defp create1_h(fields), do: create1_g([{:h, 0} | fields]) | |
| defp create1_g(fields), do: create1_f([{:g, 0} | fields]) | |
| defp create1_f(fields), do: create1_e([{:f, 0} | fields]) | |
| defp create1_e(fields), do: create1_d([{:e, 0} | fields]) | |
| defp create1_d(fields), do: create1_c([{:d, 0} | fields]) | |
| defp create1_c(fields), do: create1_b([{:c, 0} | fields]) | |
| defp create1_b(fields), do: create1_a([{:b, 0} | fields]) | |
| defp create1_a(fields), do: [{:a, 0} | fields] | |
| def create2() do | |
| %Struct{} | |
| |> struct([{:a, 0}]) | |
| |> struct([{:b, 0}]) | |
| |> struct([{:c, 0}]) | |
| |> struct([{:d, 0}]) | |
| |> struct([{:e, 0}]) | |
| |> struct([{:f, 0}]) | |
| |> struct([{:g, 0}]) | |
| |> struct([{:h, 0}]) | |
| end | |
| def create4() do | |
| %Struct{} | |
| |> struct!([{:a, 0}]) | |
| |> struct!([{:b, 0}]) | |
| |> struct!([{:c, 0}]) | |
| |> struct!([{:d, 0}]) | |
| |> struct!([{:e, 0}]) | |
| |> struct!([{:f, 0}]) | |
| |> struct!([{:g, 0}]) | |
| |> struct!([{:h, 0}]) | |
| end | |
| end | |
| # IO.puts "#{inspect CreateStruct.create1()}" | |
| # IO.puts "#{inspect CreateStruct.create2()}" | |
| IO.puts "#{inspect struct(Struct, [{:a, 1}, {:a, 42}])}" | |
| Benchee.run(%{ | |
| "create1" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create1() end) end, | |
| "create2" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create2() end) end, | |
| "create3" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create3() end) end, | |
| "create4" => fn -> Enum.each(1..100000, fn _ -> CreateStruct.create4() end) end, | |
| }, | |
| formatters: [ | |
| &Benchee.Formatters.HTML.output/1, | |
| &Benchee.Formatters.Console.output/1 | |
| ], | |
| html: [file: "benches/decode_output.html"], | |
| time: 3 | |
| ) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment