1 timer模块:
使用erlang:send_after和erlang:start_timer 会比直接调用timer模块要快。
调用timer时会起一个进程来管理,这个进程在多进程的环境下很容易被延误。
但timer:tc和 timer:sleep除外
2 list_to_atom/1:
atom类型是不会被垃圾回收的。一旦生成,就一直存在。
所以在一个长期运行的程序中,将其它类型的变量转化为atom是有危险的。一个解决的办法是先定义好可能用到的atom,然后使用list_to_existing_atom。
3 length/1:
对于list类型求其length(),时间取决于值的内容。但是tuple, byte,bit类型是常量。
length()函数的执行时间一般不用太在意。除非是一个非常长的list.
4 setelement/3:
5 size/1:
使用tuple_size和byte_size会更优化,已经更利于错误检查
6 split_binary/2:
直接使用匹配要比调用split_binary函数更高效
7 '--':
如果对两个长list直接作'--'会很慢,可以采用以下方法替代:
HugeSet1 = ordsets:from_list(HugeList1),
HugeSet2 = ordsets:from_list(HugeList2),
ordsets:subtract(HugeSet1, HugeSet2)
或者:
Set = gb_sets:from_list(HugeList2),
[E || E <- HugeList1, not gb_sets:is_element(E, Set)]
但是此方法对于有重复项的list不适合。而且这里比较用的是==, 而在'--'操作中使用的是'=:='