看板 java 關於我們 聯絡資訊
我實際重製測試的結果, 時間上只有些許不同 當Stragtegy 2使用Buffer後, 時間可以縮短非常多 不過 NIO 仍然是最快的 Strategy 1 你的tsv格式(有分隔字元) 讀取時間 14.399 秒 我的tsv格式(無分隔字元) 讀取時間 9.688 秒 補充: 不包括整數轉換 讀取時間 4.353 秒 Strategy 2 無Buffer 讀取時間 307.041 秒 有Buffer 讀取時間 2.075 秒 Strategy 3 讀取時間 0.327 秒 看來 NIO 確實挺可怕的 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.24.13.31
dryman:加入Buffer後2.375s 10/04 10:21
bitlife:建議把轉換整數部分去掉再比一次,這部分直覺佔2秒的大部分 10/04 10:43
dryman:不過我的目標就是要用(夠快)的速度載入整數啊XD 10/04 11:28
swpoker:thread? 10/04 11:28
bitlife:我的意思是如果實測結果是整數轉換佔絕大多數時間,那麼問 10/04 11:56
bitlife:題就不在於 java.io vs. java.nio, 而是java.io沒有(擴充) 10/04 11:58
bitlife:夠快的整數轉換功能 10/04 12:00
嗯, 懂你的意思. Strategy 1是將文字轉整數,會花些時間 補上 去除整數轉換的數據 Strategy 2 是沒有整數轉換的, 和Strategy 3一樣, 都是直接取出成為int ※ 編輯: AI3767 來自: 111.248.52.147 (10/04 20:14)
bitlife:.java.html readInt() 是用<<來轉換的,另外想到一件事,測 10/04 21:02
bitlife:試不同策略前,應該要清cache,因為策略3快的有點可疑 XD 10/04 21:03
readInt()這個我比較傾向認為是還原, 而不是轉換 不過, 為了慎重, 也再做了其它試驗, strategy 2和3 改為read byte 的方式 甚至連assignment也沒有了, 出來的數據如下 S2: 1.966 秒; S3: 0.344秒 (修正, 原本0.14 秒是忘了加上迴圈) 至於cache的問題, 我比較不擔心, 因為測試是跑個幾次, 結果也是沒變 還有交叉執行, 以釐清是否有執行順序的因素存在 另外, buffer的大小部份, 我改用資料筆數為大小, 取得最好的緩衝能力 結論都是一樣的 XD ※ 編輯: AI3767 來自: 111.248.52.147 (10/04 23:13)
bitlife:看到這裏,java.io在本例中所多出來的overhead大概就是1.8s 10/04 23:33
sbrhsieh:S2:1.x s, S3:0.1x s 都是有 OS 層面的 cache 10/04 23:46
sbrhsieh:改為 read byte 部分可以多作說明嗎? 10/04 23:48
原本code是用 bb.asIntBuffer() 去取 int值 改成 迴圈並由 bb.get() 取byte值 補充: 前個 S3 讀byte的數據有誤, 必須加上迴圈讀取, 抱歉 0rz ※ 編輯: AI3767 來自: 111.248.52.147 (10/05 00:44)
sbrhsieh:請問改 read byte 作法還有沒有 compose int value 部分? 10/05 01:11
沒有耶 就"bb.get();" 連assignment都沒有 不過在正式跑 ip.bin 檔前, 有先用小檔確認取得的資料是對的, 才去正式跑 ※ 編輯: AI3767 來自: 114.24.15.26 (10/05 19:45)
sbrhsieh:這樣S2吃虧在每次處理4byte,iteration 數過多 10/05 20:43
AI3767:沒有呀 S2 也是read byte版, while迴圈內, 不用再加迴圈 10/05 20:59
sbrhsieh:抱歉,沒有提供測試的碼,我無法了解你最後測試的方式 10/05 21:33