2009-02-26 9 views
0

私は数時間から数日かかる可能性のある長いシミュレーションを行い、ファイルに情報を記録しています。ファイルは数百Mbのサイズに達することができ、内部には数だけのリストがあります。私は本当にこれが発生しているオーバーヘッドについて懸念しています。私は、このメソッドを使用するオーバーヘッドが本当に大きいかどうか、そして同じような他のより効率的な方法があるかどうかを尋ねたいと思います。ファイル内のログ情報のオーバーヘッド

私はC++を使用しており、ファイルをログに記録するためにfprintfの一般的な方法を使用しています。オーバーヘッドについて説明すると、今度はファイルを使用しないでこの時間がかかります。これは理想的には理想的です。

私はいくつかのテストを行いましたが、ファイルのサイズによってオーバーヘッドが直線的に増加するかどうかはわかりません。私が言っていることは、1Gbのサイズのファイルより1Mbのサイズのファイルに行を追加するのと同じではないかもしれないということです。誰もファイルのサイズとオーバーヘッドがどのように成長するか知っていますか?

答えて

4

ちょうどエンベロープの計算が必要です。

「数百Mb」を400MBとします。
「数時間から数日」を48時間とします。

(400 * 1024 * 1024バイト)/(3600 * 48秒)= 2427バイト/秒

明らかに、あなたは自分のシステムを見たり、計算のために実数を使用していますが、上記の概算を使用することができますあなたは約2KB/secのログを記録しています。これは、ハードドライブの平均制限値に比べてかなり簡単です。

したがって、オーバーヘッドはそれほど大きくはないようです。そして、そうするより効率的な方法がありますが、数値があなたが述べた数値と大きく異なる場合を除いて、あなたが得る最小限の節約には多大な時間と労力を費やすでしょう。

+0

こんにちは、あなたの答え、ちょうど好奇心のために、多分私はこれを行うより効率的な方法について可能な場合いくつかのガイドラインを提供することができる将来のユーザーのために感謝します。 – Eduardo

+0

"効率的"という言葉はあまり漠然としていますが、一般的にはより少ないリソースでより多くのことをしようとしています。したがって、通常はボトルネックに焦点を当てます。あまりにも多くのディスクに書き込みますか?より少ないログ。または、より少ないスペースを使用するバイナリ形式でログインします。ディスクに書き込まないでください。 RAMディスクやネットワークドライブなどに書き込みます。 – Nathan

+0

未使用のリソースにも注意してください。プロセスのCPU使用量はほとんどありませんか?タスクが完了するまで、すべてのログをメモリに格納することがあります。プロセスはメモリを大量に消費しますが、CPUは軽いのですか?ディスクに書き込む前にCPU集約型圧縮ツールでログをパイプします。 – Nathan

2

数百万メガバイトはおそらく数日では関係ありません。何百ギガバイトも重要である可能性がありますが、おそらくまだ巨大ではありません。

正確なアプリケーションの回答を見つけるには、明らかな方法があります。ロギングをオンにしてシミュレーションを実行し、時間を計ってください。その後、ロギングをオフにして(同じ入力で)実行し、時間を計ります。違いを比較する。理想的には、これを数回行い、他の外乱と相殺します。私は、多くのロギングの潜在的な利点がパフォーマンスのヒット率を大幅に上回ることがわかるでしょう。

1

データをSTLベクトルに配置し、データに次のようなプロファイリングを行うことができます。
- 繰り返し線を除外します。
- 差分のみを保存します。
- 数時間後にデータをフラッシュします。
- 保存する特定のデータを選択します。
- etc ...

関連する問題