0、内置函数和运算符的性能
1)、++运算符
不要放任列表自右侧增长!此外还应该注意++运算符只是lists:append/2的一个别名,这个问题对该函数同样适用。
2)、- -运算符
- -运算符是lists:substract/2 的别名。这个运算符不常用:它的作用是从左侧列表中删除右侧列表中的元素。
如果元素顺序不是很重要,那么更为高效的方法是先排序,再调用ordersets:substract/2 。
3)、list _to_atom/1
切记原子无法垃圾回收,务必小心使用这个函数。在某些场合使用list _to_existing_atom/1更合适。
4)、length/1
为了计算元素数目,length/1必须遍历整张列表,在特殊场合可以使用模式匹配来代替此函数。
5)、size/1
length/1仅适用于列表,size/1同时适用于元组和二进制串,不适用于列表。
二者的主要区别在于size/1是常数操作,无需遍历所有数据元素。size/1用于元组返回元组的元素个数,用于二进制串返回的是字节数。
推荐使用tuple_size (T)获取元组的元素数,
用byte_size(B)或bit_szie(B)获取二进制串或位串中的字节数或比特位数。
1、用cprof计算调用次数
cprof用于记录函数调用次数。输出信息不如fprof丰富,相对于fprof,主要优势在于对运行时系统的影响较小(被分析的代码大约会慢10%)。因此,如果要对线上运行着的代码进行性能分析,使用cprof更合适。
用做性能分析的代码:
-module(profile_ex).
%% API
-export([run/0]).
run() ->
spawn(fun() -> looper(1000) end),
spawn(fun()

本文探讨了Erlang中几个关键的内置函数的性能问题,如++运算符、- -运算符、list_to_atom/1、length/1和size/1,并提供了优化建议。同时介绍了性能分析工具cprof和fprof的使用,cprof适合在线分析,而fprof提供详细执行时间信息但开销较大。
最低0.47元/天 解锁文章
1858

被折叠的 条评论
为什么被折叠?



