<p dir="ltr">Hi -<br>
As for proplists, try replacing it with the simpler and faster lists:keyfind/3.<br>
Also, you don't state the size of the data structure you're manipulating - only the number of iterations.</p>
<div class="gmail_quote">Den 16/08/2015 20.08 skrev "Gilberio Carmenates Garcia" <<a href="mailto:co7eb@frcuba.co.cu">co7eb@frcuba.co.cu</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">








<div lang="ES" link="blue" vlink="purple">

<div>

<p class="MsoNormal"><span lang="EN-US">Hi everyone here are some interesting tests
about performance in Erlang. <u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US">Today’s Topic: performance
stuffs->records vs maps vs proplists<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US">Test made against the same data represented
in three format records, maps and proplists.<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US">Test case value: 10 000 000 iterations.<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Test case:
get.<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Records:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Rec#<a href="http://rec.id" target="_blank">rec.id</a>
-> 237 ms<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Maps:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    maps:get(id,
Map) -> 550 ms<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    {id := Id}
= Map -> ~277 ms<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Proplists:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    proplists:get_value/lookup(id,
PPL) -> ~1642 ms<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Test case:
create.<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Records:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Rec = #rec{id
= N, …}  -> ~1046 ms<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Maps:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map = #{id
= N, …} -> ~ 1440 ms<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Proplists:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL =
[{id, N}, …] -> ~2318 ms<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Test case:
update.<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Records:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 1 (~908
ms): <u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Rec2 =
Rec#rec{id = N + N},<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 2 (~1057
ms):<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Rec2 =
Rec#rec{id = N, name = N, age = N, dog = N, cat = N, mow = N, tin = N},<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 3: no
equivalent<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 4: no
equivalent<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Maps:<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 1 (~3013
ms):<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map2 =
Map#{id => N + N},<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 2 (~ 4441
ms):<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map2 =
Map#{id => N, name => N, age => N, dog => N, cat => N, mow =>
N, tin => N},<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 3 (~952
ms):<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map2 =
maps:update(id, N + 1, Map)<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 4 (~6054
ms)<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map2 =
maps:update(id, N + 1, Map),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map3 =
maps:update(name, N + 1, Map2),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map4 =
maps:update(age, N + 1, Map3),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map5 =
maps:update(dog, N + 1, Map4),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map6 = maps:update(cat,
N + 1, Map5),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map7 =
maps:update(mow, N + 1, Map6),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    Map8 =
maps:update(tin, N + 1, Map7),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Proplists: <u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 1: no
equivalent<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 2: no
equivalent<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 3: (~1529
ms)<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL2 =
lists:keystore(id, 1, PPL, {id, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">case 4:
(~30705 ms)<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL2 =
lists:keystore(id, 1, PPL, {id, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL3 =
lists:keystore(name, 1, PPL2, {name, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL4 =
lists:keystore(age, 1, PPL3, {age, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL5 =
lists:keystore(dog, 1, PPL4, {dog, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL6 =
lists:keystore(cat, 1, PPL5, {cat, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL7 =
lists:keystore(mow, 1, PPL6, {mow, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">    PPL8 =
lists:keystore(tin, 1, PPL7, {tin, N + N}),<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">What about
that? I think using maps:get/2 is not so fast as using map pattern matching.<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas"><u></u> <u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Cheers,<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas">Ivan (son of
Gilberio).<u></u><u></u></span></p>

<p class="MsoNormal"><span lang="EN-US" style="font-family:Consolas"><u></u> <u></u></span></p>

</div>

</div>


<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div>