14

現在、多くの診断メッセージを端末に出力するコードがあります。これが私のコードをどれだけ遅くするか、誰か知っていますか? たとえば、実行する代わりに、出力をファイルにパイプすることで速度が大幅に向上しますか。

./my_program

走る

./my_program > output.log

また、cout を ofstream に置き換えてファイルに直接書き込むと、さらに速度が向上しますか?

編集: /dev/shm に書き込んでいると仮定しましょう。ディスク アクセス速度は実際には問題ではありません。

4

6 に答える 6

10

はい、画面へのレンダリングはファイルへの書き込みよりも時間がかかります。
プログラムのレンダリングは実行中のプログラムではないため、ウィンドウではさらに遅くなります。そのため、プロセス間で常にメッセージが送信されて描画されます。
仮想端末は実行中のプロセスとは異なるプロセス上にあるため、Linuxでも同じだと思います。

于 2012-07-17T18:11:12.183 に答える
2

確かにそうかもしれません。端末への出力には、レンダリングやその他の (重要な) 作業が含まれ、通常はバッファリングがはるかに少なくなります。OS とストリームの実装では、ファイル I/O でより多くのバッファリングとキャッシュを実行できます。

于 2012-07-14T22:58:07.260 に答える
1

スピードヒットの程度は、いくつかの要因によって異なります。たとえば、Windows コンソールは非常に遅いことで知られています。ofstream libc ++ の実装 (異なるcoutバッファ サイズ、スレッド同期など) によっては、

于 2012-07-17T18:17:50.357 に答える
0

これは、特定のシステムを測定せずに言うのは難しいですが、実際には、ファイルへの書き込みはディスプレイへの書き込みよりも高速であると思います (ファイルをスクロールする必要はありません)。

OS、システム、およびライブラリによっては、 にofstream直接書き込むと、とは異なるバッファリング スキームが使用されている場合、パフォーマンスがさらに向上する可能cout性がありますが、まったく効果がない可能性があります。確実に知る唯一の方法は、コードをプロファイリングすることです (コメントで既に提案されているように)。

于 2012-07-14T22:47:34.303 に答える
0

それは実際に印刷する量に依存します。

あなたのプログラムが 1 秒あたり 50 行以上を印刷している場合、出力が重要になり始めるに違いありません。

ファイルへの出力は、端末への出力よりもはるかに高速ですが、実行するレンダリングの量とレンダリング API に使用するものによって、端末プログラムによって速度が大幅に異なります。

ターミナル印刷やファイルへの出力のパフォーマンスについて、cout と ofstream のパフォーマンスに大きな違いがあるとは思えません。fwrite を使用してログ行を書き込んだ場合、パフォーマンスがわずかに向上する可能性があります。最終的に cout のようなものは fwrite を呼び出すので、自分でその最低レベルまで呼び出すだけで小さな改善を得ることができます。

最後に、cout のような出力ストリームは、cerr のようなエラー ストリームよりも高速です。Cout は cerr よりも多くのバッファリングを行うため、パフォーマンスが大幅に向上します。しかし、すでに cout を使用しているようです。

于 2012-07-17T17:51:03.237 に答える
0

一般的に、はい。端末に書き込む必要がない場合は、ファイルを使用できます。出力を見る必要がない場合は、/dev/null を使用することもできます。(たとえば、実際の速度を測定するには...)

于 2012-07-17T17:55:31.883 に答える