此问题特定于Erlang,但可能对其他IO库有一般意义。在Erlang中,我可以编写io:format(IOF, "data: ~p", [Data])
,它会将变量Data
的内容打印到文件IOF
指向的地方。我的问题是这样的:更好还是更高效地选择很多小型的io:format()调用,还是一个巨大的调用?例如,什么会更快?出于演示的目的,假设我Data
变量的大小是每个1KB
在大小和N > 100,000
Erlang io:格式缓冲和效率
场景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])
如果这种差别是微不足道的我我不是很感兴趣,但如果可能会有很大的差异,那么我有兴趣知道为什么。
io&io_lib是有史以来最慢的狗屎。考虑使用日志库或对原始文件进行快速操作。 – user425720
为什么它会变慢,为什么使用第三部分日志记录库会更快? –
我不熟悉内部实现。 IO一直是Erlang的性能问题,相信我io和io_lib会影响你的系统。使用fprof(profiler)来查看这些函数有多高。 – user425720