→ 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