erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 line
1.4 KiB

5 年之前
5 年之前
5 年之前
5 年之前
5 年之前
5 年之前
3 年之前
5 年之前
5 年之前
5 年之前
5 年之前
5 年之前
5 年之前
  1. -module(utEtsOrdDs).
  2. -compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]).
  3. -export([start/2]).
  4. start(Num, Pid) ->
  5. Ds = init(Num),
  6. Time1 = erlang:monotonic_time(),
  7. NewDsI = insert(Num, Ds),
  8. Time2 = erlang:monotonic_time(),
  9. NewDsR = read(Num, NewDsI),
  10. Time3 = erlang:monotonic_time(),
  11. NewDsU = update(Num, NewDsR),
  12. Time4 = erlang:monotonic_time(),
  13. NewDsF = for(Num, NewDsU),
  14. Time5 = erlang:monotonic_time(),
  15. delete(Num, NewDsF),
  16. Time6 = erlang:monotonic_time(),
  17. erlang:send(Pid, {over, self(), Time2 - Time1, Time3 - Time2, Time4 - Time3, Time5 - Time4, Time6 - Time5, ets:info(Ds, memory)}),
  18. exit(normal).
  19. init(_Num) ->
  20. ets:new(test, [ordered_set]).
  21. insert(0, Ds) ->
  22. Ds;
  23. insert(Num, Ds) ->
  24. Key = utTestDs:makeK(Num),
  25. Value = utTestDs:makeV(Num),
  26. ets:insert(Ds, {Key, Value}),
  27. insert(Num - 1, Ds).
  28. read(0, Ds) ->
  29. Ds;
  30. read(Num, Ds) ->
  31. Key = utTestDs:makeK(Num),
  32. Value = ets:lookup(Ds, Key),
  33. read(Num - 1, Ds).
  34. update(0, Ds) ->
  35. Ds;
  36. update(Num, Ds) ->
  37. Key = utTestDs:makeK(Num),
  38. Value = utTestDs:makeV2(Num),
  39. ets:update_element(Ds, Key, {2, Value}),
  40. update(Num - 1, Ds).
  41. for(Num, Ds) ->
  42. Fun =
  43. fun({Key, Value}, Acc) ->
  44. Value
  45. end,
  46. List = ets:foldl(Fun, [], Ds),
  47. Ds.
  48. delete(0, Ds) ->
  49. ok;
  50. delete(Num, Ds) ->
  51. Key = utTestDs:makeK(Num),
  52. ets:delete(Ds, Key),
  53. delete(Num - 1, Ds).