2011-03-01 7 views
2

この質問はErlangに固有ですが、他のIOライブラリには一般的な意味があります。 Erlangではio:format(IOF, "data: ~p", [Data])と書くことができ、変数Dataの内容をIOFが指すファイルに出力します。私の質問はこれです:多くの小さなio:format()コール、または1つの巨大なコールを好むことは、効率的な方が良いでしょうか?たとえば、何が速いでしょうか?この差はごくわずかである場合、私はErlang io:フォーマットのバッファリングと効率

io:format(IOF, "data1: ~p data2: ~p ... dataN: ~p", [Data1, Data2, ..., DataN]) 

:デモの目的のために、私の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本当に興味はありませんが、大きな違いがある場合は、理由を知ることに興味があります。

+0

io&io_libはこれまでで最も遅いです。ロギングライブラリの使用や、生ファイルの高速処理を検討してください。 – user425720

+0

なぜそれは遅く、なぜ3番目のロギングライブラリを使用する方が高速でしょうか? –

+0

私は内部実装に精通していません。 IOは常にErlangのパフォーマンス上の問題であり、ioとio_libがシステムに影響すると私は信じています。 fprof(profiler)を使用して、これらの関数の高さを確認します。 – user425720

答えて

2

file:open/2モードのうち1つを{delayed_write, Size, Delay}とすることをお勧めします。これにより、データをバッファリングし、効率的にデバイスに書き込むことができます。

このようにしても、どちらの呼び出しでも大きな違いはありません。

+0

delay_writeを使用すると、io:書式呼び出しがいくつ行われても、ダンプする前にバッファにロードするバイト数を指定できます。 –

+0

@Travis:そうだね。 –

関連する問題