我工作在Java中的數據分析程序的值加倍,然後做計算。數據來自汽車傳感器,並以CSV格式提供。它需要讀取,解析爲加倍然後「轉換」(例如從5/12伏特值到G力/英里/%節氣門開度/%制動力等)。數據文件的大小將高達約200MB。優化/併發JAVA:讀CSV文件,解析數據對
我目前正在做的是用BufferedReader讀取數據,用indexOf()和substring()分割tokenz,用parseDouble解析它們爲double,將它們添加到ArrayList的ArrayList中(double ArrayList)每個令牌,最多有20個令牌)。數組列表後,我必須轉換雙打,這意味着對每個值使用多項式(這似乎佔用了大部分時間,超過2/3)。
整個序列是240條000線,20代幣的採樣數據大約7秒。我想知道如何改善這一點。我一直在考慮使用流和併發來進行文件讀取和解析,但似乎最大的問題是多項式數學。我用來計算轉換後的值的代碼是:
pol0 + pol1 * value + pol2 * Math.pow(value, 2) + pol3 * Math.pow(value, 3)
+ pol4 * Math.pow(value, 4);
其中polX是多項式,值是我要轉換的雙值。這當然是不同的,這取決於我有多少多項式可用。
所以,研究結果作出任何意義嗎?如果是這樣,有關如何改善此過程的性能的任何建議?
感謝您提供了許多有用的網站。 :-)
可能最好是第一規格您的應用程序?有很多好的Java分析器可以告訴你代碼中真正的瓶頸。 – xappymah
此外,與大量的讀取,值解析相比,ArrayList創作(和擴展應該是)多項式數學似乎不是代碼中最慢的部分。 – xappymah
好吧,現在它不是獲得後最慢的部分擺脫Math.pow的執行時間減半。我很確定現在最慢的部分是子串和解析。與需求規格相比,性能很好,所以我並不擔心。我試圖用最大尺寸立即創建ArrayList,但它似乎並沒有提高性能(從大約3100ms降到3000ms)。 – lauritz