2017-10-09 9 views
0

次の状況: 非常に頻繁に呼び出される巨大なプログラムで1つのメソッドを編集していますが、正確に(実行ごとに異なる)頻度はわかりません。fopen/fcloseシナリオでのパフォーマンスの向上

これで、txtファイルにログを追加する必要がありました。各呼び出しでファイルを開く/閉じることは、アプリケーション全体にとって大きなボトルネックになります。

この関数の最後の呼び出しがわからないので、ファイルを開いたままにすることは本当にオプションではありません。

発信サイトを変更せずにこれをスピードアップする方法はありますか?
私は同僚と仕事を結合するときに問題を引き起こすので、メソッドのシグネチャを変更しないでください(ここでは動作するバージョンコントロールはありません)

+3

したがって、呼び出しごとにファイルを開いたり閉じたりしないでください。プログラムが正常に終了すると、ファイルはフラッシュされ閉じられます。各ロギングコールの後に 'fflush()'を使うべきでしょう(それにはオーバーヘッドがあります)。しかし、各通話を開いたり閉じたりしないでください。遅すぎます。追加モードを考えてみましょう。おそらく良い考えです。インタフェースを関数に変更する必要はありません。 'static FILE * stdlog = 0;'変数をファイルスコープに作成し、ログにポインタがnullの場合はファイルを開きます。その後、 'stdlog'をログファイルストリームとして使用します。 'stdlog'を危険にさらしたくないなら、' log_fp'を試してください。 –

+0

ログバッファがいっぱいになるとログにバッファを使用して、ファイルに書き込みます。 –

+3

そして、20世紀には、実際のバージョン管理は愚かな間違い(犯行)ではありませんでした。 21世紀には、それはばかばかしいほどプロフェッショナルではありません。 –

答えて

1

ファイルを開いたままにしておきます。プログラムがexitを呼び出すか、mainから戻ると、すべてのファイルが閉じられます(保留中のバッファをフラッシュします)。ログ機能への呼び出しが「最後の呼び出し」であるかどうかは気にする必要はありません。

0

R.のanswerに加えて、割り込みやシグナルを捕捉してファイルを閉じることもできます。

関連する問題