Re: [問題] 更有效率的讀檔?

看板java作者 (自立而後立人。)時間12年前 (2012/04/27 12:51), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串3/8 (看更多)
※ 引述《lovebluetea (cchichi)》之銘言: : → Lordaeron:放到RAMDISK中, 這會便宜很多了吧. 絕對比builder便宜 04/26 22:04 : 推 LaPass:java有RAMDISK這個物件嗎? 囧" 04/26 22:11 : 推 LaPass:還是Lordaeron把StringBuilder當成硬體之類的.... 04/26 22:13 : → Lordaeron:-_-" 將你的檔案丟到ramdisk 不就好了. 需要人教嗎? 04/26 23:26 : 推 LaPass:目前我沒遇到這麼要求速度的物狀況過.... 囧" 04/27 00:13 : → Lordaeron:哪你在問什麼RAMDISK 物件呢? 04/27 09:51 : 推 LaPass:因為在討論程式碼的時候,突然有人跳到硬體方面,感覺焦點 04/27 10:38 : → LaPass:根本沒對在一起.... 04/27 10:39 : → LaPass:而且.... 在java中,StringBuilder是非常基礎的東西.... 04/27 10:42 : → Lordaeron:StringBuilder 是哪一版的Java 才出現的? 基礎? 04/27 10:45 1.4 就有 StringBuffer , 1.4 到現在少說八九年有了,應該夠格說基礎了。 對寫 java 的人來講,大量字串處理不用 StringBuffer/StringBuilder , 我會說他的確是不懂基礎沒錯。 : → LaPass:搞不懂為什麼會跳過這個解法,去換HD或是使用RAMDISK.... 04/27 10:46 : → Lordaeron:因為你檔案一大,什麼都沒用Java就是慢. 04/27 10:47 : → Lordaeron:開個600K 還要16s, 6MB呢?60MB? 04/27 10:48 有幾分證據說幾分話。 這裡有一個 zip 檔,解開有一個 25m 的純文字檔,裡面有 26280800 個字元。 http://tonyq.org/test/test.zip 測試程式碼在測,全部讀完的時間我本機測是 432ms 。 https://gist.github.com/b02a3e300c2a94e445ba 600K 要 16s ,不知道是再怎樣的極端條件或環境下才會產生的數據。 我從學生時代就很常用 java 作 web crawler , 動輒幾十 m 百 m 的資料處理,從沒碰過你說這麼慢的狀況。 Java 很顯然不會是最快的 solution ,但也沒這麼不堪啊。XD ps. 如果改用字串加法 https://gist.github.com/b424fa134cead3593ada 10m左右的文字檔,會需要 21秒 (21834 ms ), 只測 10m 是因為我沒耐心等 25m 的資料跑完, 越大就越慢,因為它卡到的是 memory bound 不是 cpu bound。 : 推 LaPass:嗯,焦點果然不同.... 以這個例子而言,問題出在字串相加。 04/27 10:57 : → LaPass:很感謝你提供RAMDISK的方法,有用到大檔案時,我會記得的 04/27 10:59 : → Lordaeron:你不用去解釋什麼不同, 不然你就拼一下不作字串相加好 04/27 10:59 : → Lordaeron:了,看會快多少? 檔案處理本來就不適合Java/perl之類做 04/27 11:01 : → Lordaeron:大檔更是慘. 非得要的話, 請別去想改什麼鳥算法的. 04/27 11:04 量大的話大概會快個十百倍吧,就以剛剛那個例子來看, 就有超過百倍,這取決於你記憶體有多大。 以 String concat 來講,有大量字串操作, 請記得要改一下用 StringBuffer,不要用字串相加那種「鳥算法」。 : 推 LaPass:為什麼跟你客客氣氣的,你還這麼刺? = = 04/27 11:17 : → Lordaeron:咦? 客氣? 04/27 11:20 -- 網頁上拉近距離的幫手 實現 GMail豐富應用的功臣 數也數不清的友善使用者體驗 這就是javascript 歡迎同好到 AJAX 板一同討論。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.135.202.140 ※ 編輯: TonyQ 來自: 220.135.202.140 (04/27 12:53) ※ 編輯: TonyQ 來自: 220.135.202.140 (04/27 12:54)

04/27 13:11, , 1F
推一個!
04/27 13:11, 1F

04/27 13:53, , 2F
其實 java 1.7 server 算很快的了…
04/27 13:53, 2F

04/27 14:00, , 4F
另外純推 stringbuilder
04/27 14:00, 4F
文章代碼(AID): #1FcYNW6e (java)
討論串 (同標題文章)
文章代碼(AID): #1FcYNW6e (java)