erlang中,一个角色既是是一个进程,一直纠结角色的数据是用进程字典保存还是用记录保存,对记录的操作更新应该是最慢的(需要复制出一个新的),因此写了个测试。
-module(record).
-export([run/1]).
-record(rc, {aasdf1=2, fsdff2=er, fgsdaf3=4, lsdjff5=tyyyt, retsfd6=sasdf, ljksdf7=456, vcbvc8=76, cvxzdf9="fsdf"
,saxcvsd10=43, aazb1=34, asdfgdfg11="ccccc", vbn12=655, bdfgsd13="fffff", klvxvdf14=999, lkjjj15="ffff"
,sdffsd16={fsdf, 34}, dgfdsfdsd17=kkkk, lsdfa18="ddddddddddd", lkwef19=987665, sdfwef20="w232131sweerw"
,sfsaf21="fsdfasdf", sdfeww22=ewrw, asdfw23="sssssssssssfwe", aerw24=13123, asdfkja25="fsaw2342sf"
,asdf26="rgfvsdafsa", wer27="fsawer324", fwer28="fsweriuio", fasd29="fswerrxd", iuiuio30="fsasdffsdfds"
,asdf31="rgfvsdafsa", wer32="fsawer324", fwer33="fsweriuio", fasd34="fswerrxd", iuiuio35="fsasdffsdfds"
,sdff36={fsd, "ffffffffg"}, sasdf37={fad, "5464546"}, ssdf38={ff, "fsaeee"}, lkad39={bv, "fasdfsdfd"}}).
run(N) ->
io:format("===~p, ~p~n", [statistics(runtime), statistics(wall_clock)]),
% put(kkjj, "llll"),
% put(ffff, 776),
% loopDic(N),
loop(N, #rc{aazb1=10}),
io:format("===~p, ~p~n", [statistics(runtime), statistics(wall_clock)]).
loop(0, Rc) ->
io:format("get:~p, ~p~n", [Rc#rc.aazb1, Rc#rc.ssdf38]),
io:format("finsh.~n");
loop(N, Rc) ->
loop(N-1, Rc#rc{aazb1=N, ssdf38={hh, N}}).
loopDic(0) ->
io:format("finsh.~n");
loopDic(N) ->
% V = get(kkjj),
put(kkjj, N),
loopDic(N-1).
虽然记录内的数据项很多,更新(内含复制)的速度依然很快,在0.2um左右。与进程字典接近。
评论