Erlang 常见注意事项


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不适合。而且这里比较用的是==, 而在'--'操作中使用的是'=:='


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值