IoリダイレクトとファイルロギングパフォーマンスC / C ++

IoリダイレクトとファイルロギングパフォーマンスC / C ++

プログラムの実行中に通常の printf を実行し、stdout をファイルにリダイレクトする場合 (例: ./a.out > log.txt 2>&1 ) fprintf を使用してドキュメントにログを記録する場合、レイテンシの観点からパフォーマンスの違いはありますか? ?

特に、私はACEロギングを使用し、現在のプログラムを実行するとioをファイルにリダイレクトします。ロガーをファイルに関連付けるのはパフォーマンスの観点から有利ですか?

ベストアンサー1

「待機時間」には、「効率的な」ファイルシステムの書き込みを可能にするのに十分な出力をバッファリングするstdioシステムを含めることができることに注意する必要があります。man 3 setbuf詳しくは参考資料をご覧ください。バッファリングはFILE *基準ごとに行われるため、通常バッファリングさstderrれていないものはstdout通常バッファリングされます。そのため、例に従ってstderr出力と出力の両方がstdout同じファイルで指定されていると、順序が正しくありません。

FILE *プログラムがインスタンスを開くと、すでにアクションsetbuf()を実行したり、通常の「fflush()」呼び出しを実行していない限り、「遅延時間」を予測することはできません。

fflush()最終的に、クラッシュが発生する前にstdoutの出力が実際にログファイルに保存されるようにクラッシュプログラムをたくさん呼び出すようになりました。安くて汚いです。

おすすめ記事