此问题特定于Erlang,但可能对其他IO库有一般性影响。在Erlang中,我可以编写io:format(IOF, "data: ~p", [Data])
,它会将变量Data
的内容打印到文件IOF
指向的位置。我的问题是:更好,效率更高,更喜欢许多小的io:format()调用,还是一个巨大的调用?例如,什么会更快?出于演示目的,假设我的Data
变量的大小各为1KB
,N > 100,000
情景A:
io:format(IOF, "data1: ~p", [Data1])
io:format(IOF, "data2: ~p", [Data2])
...
io:format(IOF, "dataN: ~p", [DataN])
情景B:
io:format(IOF, "data1: ~p data2: ~p ... dataN: ~p", [Data1, Data2, ..., DataN])
如果这种差异可以忽略不计,我真的不感兴趣,但如果可能存在很大差异,那么我很想知道原因。
答案 0 :(得分:2)
我建议您研究file:open/2
模式,其中一种是{delayed_write, Size, Delay}
。它允许您缓冲数据并有效地将其写入设备。
通过这种方式,这两种电话都不会产生巨大的差异。