Javaのデータ解析プログラムで作業しています。データは車のセンサからのもので、CSV形式で配信されます。読み込み、解析して2倍に変換する必要があります(たとえば、5/12ボルトの値からG-forces/mph /%スロットル開度/%制動力など)。データファイルは最大約200MBのサイズになります。最適化/並行性JAVA:CSVファイルを読み込み、データを解析して値を計算します。
私は現在、BufferedReaderでデータを読み込み、indexOf()とsubstring()でtokenzを分割し、parseDoubleで2倍に解析し、2倍のArrayListのArrayListに追加します各トークンには、最大約20のトークンがあります)。 arraylistsが作成された後、私は各値に多項式を使用することを意味するdouble型を変換する必要があります(これは、ほとんどの時間を費やしているようですが、2/3以上)。
20トークンの240,000行のサンプルデータの場合、シーケンス全体は約7秒です。私はこれをどのように改善できるのだろうかと思っています。私はファイルの読み込みと解析にストリームと並行処理を使用することを考えてきましたが、最大の問題は多項式の数学のようです。変換された値を計算するために使用しているコードは次のとおりです。
pol0 + pol1 * value + pol2 * Math.pow(value, 2) + pol3 * Math.pow(value, 3)
+ pol4 * Math.pow(value, 4);
ここで、polXは多項式であり、値は変換するdouble値です。これはもちろん、使用可能な多項式の数によって異なります。
だから、これは意味がありますか?もしそうなら、このプロセスのパフォーマンスを改善する方法に関する提案はありますか?
多くの有益なユーザーを抱えてくれてありがとうございます。 :-)
は、最初にアプリケーションをプロファイリングするために優れていることができますか?あなたのコードに実際のボトルネックを示すことができる良いJavaプロファイラがたくさんあります。 – xappymah
また、多くの読み込みと比較すると、値の解析、ArrayListの作成(および拡張と思われる)多項式の数式は、コードの中で最も遅い部分ではないようです。 – xappymah
これは、 Math.powを削除すると、実行時間は半分になります。私は、最も遅い部分が現在、部分文字列と解析であることを確信しています。パフォーマンスは要件仕様と比較してすぐれているので、あまり心配していません。私はすぐに最大サイズでArrayListを作成しようとしましたが、パフォーマンスを大幅に向上させるようには見えませんでした(約3100msから合計3000msまで)。 – lauritz