0

CSV ファイルに書き込もうとしているプログラムがあるとします。このファイルには、カンマで区切られた何千もの値と何千もの行が含まれる可能性があります。

今は、BufferedWriter の write 関数を 1 文字ずつ繰り返し呼び出しているだけなので、文字を連結して長い文字列にして、PrintWriter などの別のクラスを使って書き込んだら、パフォーマンスが向上するかどうか疑問に思っています。

直感的には、どちらの方法も個々のバイトを書き込むことになるため、高速ではないと思いますが、確認したかったのです。

4

2 に答える 2

4

直感的には、どちらの方法も個々のバイトを書き込むことになるため、高速ではないと思いますが、確認したかったのです。

あなたの仮定は少し間違っています。より長いデータで書き込みが少ないと、(通常) システムコールが少なくなり、各バイトを個別に書き込むよりも高速になります。

10 個の箱をある都市から別の都市に移動する必要があるかのように、すべての箱を 1 台のトラックにまとめて運ぶことも、1 つずつ運ぶこともできます。それでも 10 ボックス X キロメートル移動する必要がありますが、方法によって効率に大きな違いがあります。

writeBufferedWriter を使用して を何度も呼び出しても、実際には毎回ファイルに書き込むわけではないことに注意してください(そのため、 Buffered Writer と呼ばれます...)

于 2012-04-29T23:23:16.350 に答える
0

今は、BufferedWriter の write 関数を 1 文字ずつ繰り返し呼び出しているだけなので、文字を連結して長い文字列にして、PrintWriter などの別のクラスを使って書き込んだら、パフォーマンスが向上するかどうか疑問に思っています。

それが大きな違いをもたらすかどうかは疑わしい。

ただし、私の直感では、現在行っている方法は、文字列を作成してそれを記述するよりも高速である可能性が高いということです。別の方法としては、複数 (少なくとも 2 つ、おそらくそれ以上) のヒープ ノードを割り当て、文字を一時的な文字列にコピーするという追加のオーバーヘッドが発生します。他の場所でそのオーバーヘッドを取り戻すとは思いません。しかし、これは憶測です。最も重要なことは、出力スタックのどこかにバッファリングがあることです。

私のアドバイス:

  • これに時間を無駄にしないでください。
  • 実際の (測定可能な) パフォーマンスの問題がある場合は、2 つの戦略を使用してアプリケーション (またはベンチマーク) をプロファイリングし、アプリケーションにとってどちらが優れているかを確認します。
于 2012-04-29T23:34:58.127 に答える