2013-11-09 56 views
0

我有一個SCALA(+ JAVA)代碼,它以特定的速率讀寫。剖析告訴我代碼中的每個方法執行多少時間。如何測量我的程序是否達到其最高效率?爲了使我的代碼得到優化,以便以給定配置可能的最大速度進行讀取。我知道這是硬件特定的,因機器而異。如果有一個簡短的方法來衡量過程。如果我的程序正在以硬件可能的最快速度讀寫。 (我正在使用FileWriter和BufferWriter一起使用。)讀寫效率

+0

您使用哪種操作系統? (Windows,Linux,Mac OS X,...) – Joni

+0

紅帽企業Linux服務器6.4 – Learner

回答

1

對於給出最佳可能選擇的描述可能是試驗。你可以衡量什麼:

  • 更改緩衝區的大小(這並沒有幫助我,當我嘗試這樣做)
  • 切換到NIO(可能有助於對大文件)
  • 您緩存讀取數據(可能幫助小文件),緩存目錄內容如果有很多文件。當文件夾中文件的數量增長時,打開文件速度會降低。

確保代碼分析代碼沒有問題的一種可能技術是爲您的方法獲取CPU時間分佈樹並在大部分時間內擴展執行路徑。如果所有這些路徑都轉到Java標準庫,那麼您可能會達到最佳性能。

UPDATE

其他有些東西從你提供的hrof &技術。

  • 隨着探查或其他一些tecnhinique(我喜歡秒錶爲他們提供更多的穩定和實際的結果),你需要找到什麼是你的瓶頸。
  • 大多數IO可以優化使用單個緩衝區 - 這對於Guava或Apache Commons IO來說並不那麼痛苦。
  • 但是,如果你在你的序列化鏈中使用Jackson,如果它是你的瓶頸,那麼你可以做的不多。改變算法?
  • 有緩慢的傢伙(相對於本地文件系統IO) - 即Formatter S,String.format很慢,傑克遜等
  • 沒有與IO典型的慢操作 - 即緩衝區分配中,字符串連接,有太多的分配char[]緩衝區是IO優化的一種氣味。
+0

尼斯,究竟是什麼意思緩存目錄數據?關於該方法的任何示例。以下是我記憶的示例分解。 http://pastebin.com/PEH8yR3v – Learner

+1

不幸的是,你最終給出的標準並沒有真正起作用......即使OP發現有95%的時間花在等待I/O上,他仍然可能很遠遠離最佳性能... –

+0

將小文件讀入內存,如果這增加了速度。你能否告訴我們你的代碼,從hrof dump中看到你正在使用Jackson,Formatters和正則表達式,其中任何一個都可能成爲瓶頸。在這種情況下,優化IO意義不大。您也可以使用JDK的JVisualVM,它具有體面的用戶界面進行分析。如果你這樣做,請附上截圖。 –