2011-01-18 10 views
1

現在、クライアント/サーバーシステムがあります。私たちは、クライアントのPC上のテキストファイルにログを書き込むことで、システム上の各トランザクションのパフォーマンス(要求/処理/ SQLクエリの開始時間など)を監視するこのアプリケーションを持っています。Java FileWriter:クライアント/サーバー環境でのファイルのオープン/クローズ(複数インスタンス)対単一のオープン/クローズ(単一インスタンス)

私たちの現在の実装はすべての要求に対して行われました。私たちはログファイルを開き、トランザクションの詳細を書き、次に私たちが行うすべての要求に対してファイルを閉じます。また、各クライアントのFileWriterのインスタンスが個別に存在します。

アプリケーションの使用を通じてテキストファイルをすべて開いてから、FileWriterの単一インスタンスを使用してログアウトするだけでファイルを閉じるほうがよいかどうかは疑問です。

  1. FileWriterのインスタンスを1つだけ使用すると、どのような影響がありますか?
  2. Filewriterを複数インスタンスから単一インスタンスに変更すると、大幅な速度の変化がありますか?
+3

ロガー(Javaシステムロガーまたはlog4jのいずれか)だけを使用することを検討しましたか?これは、すべての同期の問題を処理し、より多くの設定を行い、非常にうまく動作します。 –

答えて

0

多くの書き込みを行っている場合は、ファイルを1回閉じるだけでパフォーマンスが向上することがあります。しかし、私は、あなたがやっている他のアクション(特にSQLクエリ)と比較してバケツが落ちるように思えるほどの利益はないと思っています。

0

プラットフォームによっては、同じファイルに対して1つのFileWriterしか使用しないことがあります。ハンドルを開いたままにしておきます。 少なくとも内部でスレッド同期を処理するPrintWriterを使用する必要があります。 パフォーマンスを考慮して、パフォーマンスの安全性を交換することができます。FileDescriptor.sync().FileDescriptorを使用して作成できます。これはFileOutputStreamから取得できます。

私は、log4jまたはJavaの独自のロギングメカニズムを使用するという概念を2番目に使います。