一个简单的列表操作性能测试
Note:首先要了解,Erlang里面的列表,比如 ,其实是这样的方式来存储 ]]],因此在头部插入一个元素,很简单,但是在尾部插入就比较困难了。闲来对Erlang中的2个列表操作进行了测试,先上代码:
-module(test_list).-compile(export_all).main() -> test_concat(), test_flatten(), test_append_tail(), test_append_header().test_concat() -> statistics(wall_clock), test_concat(1000000).test_concat(0) -> {_, Duration} = statistics(wall_clock), io:format("Concat Duration ~pms~n", ), ok;test_concat(N) -> "<title>" ++ integer_to_list(N) ++ "</title>", test_concat(N-1).test_flatten() -> statistics(wall_clock), test_flatten(1000000).test_flatten(0) -> {_, Duration} = statistics(wall_clock), io:format("Flatten Duration ~pms~n", ), ok;test_flatten(N) -> lists:flatten(["<title>",integer_to_list(N),"</title>"]), test_flatten(N-1).test_append_tail() -> statistics(wall_clock), test_append_tail(100000).test_append_tail(0) -> {_, Duration} = statistics(wall_clock), io:format("Append tail Duration ~pms~n", ), ok;test_append_tail(N) -> append_last([], 97, 122), test_append_tail(N-1).append_last(List, N, N) -> List ++ ;append_last(List, Curr, N) -> append_last(List ++ , Curr+1, N).test_append_header() -> statistics(wall_clock), test_append_header(100000).test_append_header(0) -> {_, Duration} = statistics(wall_clock), io:format("Append header Duration ~pms~n", ), ok;test_append_header(N) -> append_header_and_reverse([], 97, 122), test_append_header(N-1).append_header_and_reverse(List, N, N) -> lists:reverse();append_header_and_reverse(List, Curr, N) -> append_header_and_reverse(, Curr+1, N).
test_concat() 和 test_flatten(),测试使用 ++ 构造一个 list,和使用 lists:flatten() 构造list的开销;test_append_tail() 和 test_append_header(), 测试使用 ++ 和 再lists:reverse() 方式将大量字符构造成一个列表的开销。
<div class="quote_title">引用
页:
[1]