0

特定の速度で読み書きする SCALA(+ JAVA) コードがあります。プロファイリングは、コード内の各メソッドの実行にかかった時間を教えてくれます。プログラムが最大の効率に達しているかどうかを測定するにはどうすればよいですか? コードを最適化して、指定された構成で可能な最大速度で読み取るようにします。これはハードウェア固有であり、マシンごとに異なることを知っています。プロセスを測定するための近道がある場合。私のプログラムがハードウェアで可能な最速の速度で読み書きしている場合。(FileWriter と BufferWriter を併用しています。)

4

1 に答える 1

1

説明が与えられた場合、可能な限り最良の選択は実験することかもしれません. 測定できるもの:

  • バッファサイズの変更(これを試したとき、これは役に立ちませんでした)
  • NIO への切り替え (大きなファイルの場合に役立つ場合があります)
  • 読み取ったデータをキャッシュし (小さなファイルの場合に役立つ場合があります)、ファイルが多数ある場合は dir コンテンツをキャッシュします。フォルダ内のファイル数が増えると、ファイルを開く速度が低下します。

コード プロファイリングでコードに問題がないことを確認するために考えられる手法の 1 つは、メソッドの CPU 時間分布ツリーを取得し、ほとんどの時間を消費する実行パスを展開することです。これらすべてのパスが Java 標準ライブラリに向かう場合、おそらく最高のパフォーマンスに達しています。

アップデート

あなたが提供したhrofからのいくつかの他のものとテクニック。

  • プロファイラーまたはその他の技術 (より安定した現実的な結果が得られるストップウォッチの方が好きです) を使用して、ボトルネックを見つける必要があります。
  • ほとんどの IO は、単一のバッファーを使用するように最適化できます。これは、Guava や Apache Commons IO ではそれほど苦痛ではありません。
  • ただし、シリアル化チェーンで Jackson を使用している場合、それがボトルネックである場合、できることはあまりありません。アルゴリズムの変更?
  • (ネイティブファイルシステムIOと比較して)遅い人がいます-つまりFormatterString.format非常に遅い、ジャクソンなどです。
  • IO には典型的な遅い操作があります。つまり、バッファの割り当て、文字列の連結、割り当てられたchar[]バッファが多すぎることは、IO の最適化の匂いです。
于 2013-11-09T19:35:54.413 に答える