六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 56|回复: 0

一个简单的列表操作性能测试

[复制链接]

升级  14.67%

18

主题

18

主题

18

主题

秀才

Rank: 2

积分
72
 楼主| 发表于 2013-2-4 20:06:46 | 显示全部楼层 |阅读模式
Note:首先要了解,Erlang里面的列表,比如 [1,2,3,4],其实是这样的方式来存储 [1,[2,[3,[4]]]],因此在头部插入一个元素,很简单,但是在尾部插入就比较困难了。

闲来对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", [Duration]),    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", [Duration]),    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", [Duration]),    ok;test_append_tail(N) ->    append_last([], 97, 122),    test_append_tail(N-1).append_last(List, N, N) ->    List ++ [N];append_last(List, Curr, N) ->    append_last(List ++ [Curr], 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", [Duration]),    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([N|List]);append_header_and_reverse(List, Curr, N) ->    append_header_and_reverse([Curr|List], Curr+1, N).

test_concat() 和 test_flatten(),测试使用 ++ 构造一个 list,和使用 lists:flatten() 构造list的开销;test_append_tail() 和 test_append_header(), 测试使用 ++ 和 [H|T]再lists:reverse() 方式将大量字符构造成一个列表的开销。

<div class="quote_title">引用
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表