2017-09-02 2 views
-1

次のコードでファイルに書き込みますが、30MB後、40MBまたは50MBになると非常に遅くなります。遅くなくファイルに保存するためにJavaのBufferedWriterを最適化するにはどうすればいいですか?

public class FileClass { 
    public static BufferedWriter bw; 

    public static void WriteFile(String filename, String text) { 
    try { 
     bw = new BufferedWriter (new FileWriter("all.txt", true)); 
     bw.write(text); 
     bw.flush(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

マイコンピュータの仕様:Dell Latitude E6420、8GB RAM、1TB HDD、Windows 8.1。

私はFileWriterだけを使ってみましたが、それは同じです。私はbw.close()コールを削除しました。なぜなら、含まれていれば遅いからです。それがなければ速くなりますが、ファイルへの2回の書き込みの後には遅くなります。皆さんがスニペットを持っていれば、私は非常に速くスローダウンせずにファイルに書き込むことができます...それは素晴らしいことでしょう!

+3

確かに簡単な答えは次のとおりです。それを洗い流してはいけません。そして、もしあなたがそれをフラッシュし続けたいならば、すべての書き込みで明示的にフラッシュすることがバッファリングの目的を打ち負かすので、 'FileWriter'に直接書き込んでください。 –

+0

また、 'seek 'とappendに関連している可能性があります。' FileWriter'を保つか、ファイルローリング戦略を使用してみてください。 –

+0

どうすればいいのか分かりますか?Andy Turner ...ありがとう – PenDiv

答えて

1

@AndyTurnerと同じように言った。ファイルに複数回書き込み操作を開始する前に、つまりこのメソッドを呼び出す前にファイルを開きます。 flush()を削除します。すべての操作を完了したらファイルを閉じます。これは何倍も高速になります。

+0

okですが、どうすれば実装できますか...私は方法を知っているとは思わない。あなたが私に言ったことをどうやってやるのか分からないさまざまな方法を試しました。それがどのように行われたか私に教えてください。 – PenDiv

+0

私はあなたが理解していないことを理解していません。それは、内側から外側のループにコードを移動するだけです。完璧にシンプル。あなたはすべてのコードを提供しているわけではありませんが、他の誰かがあなたのためにあなたの仕事をすることを期待することを余儀なくされているでしょう。 – EJP

+0

これはファイルクラスのすべてのコードです。それはどんなループでもありません – PenDiv

関連する問題