[問題] 有效率的文字檔案讀取方式

看板C_and_CPP (C/C++)作者 (allstar)時間16年前 (2009/05/18 00:27), 編輯推噓2(204)
留言6則, 2人參與, 最新討論串1/1
需要處理的資料,單筆固定 100 bytes 資料不會超過 30000 筆 但是不是全部資料都需要用到 請問用什麼方式去讀會比較好? 爬文爬到 作者 BETNPP (NPP) 看板 C_and_CPP 標題 Re: [問題] 比較有效率的文字檔案寫入方式 時間 Mon Aug 25 10:13:21 2008 ─────────────────────────────────────── 一次從硬碟讀多一點資料呢? 應該會比一直去跟硬碟小筆資料快 因為request次數變少了吧 之前處理過4GB的純文字檔就是用這樣處理的 我一開始的想法是,要使用資料的時候再去檔案讀 以每筆資料 70 bytes,30000 筆共 21 MB 的資料下去跑測試 一次讀一筆,讀入 30000 筆 共花 3714 毫秒 平均一筆資料 0.124 毫秒 再來試著一次讀取全部資料,一樣是那 21 MB 的測試資料 共花 108 毫秒 平均一筆資料 0.004 毫秒 問題在於,檔案有大有小,有些資料又不是全部需要 只有 100 筆資料時,一次讀取全部資料花 1 msec,分次讀取花 20 msec 一次讀取全部資料大概跟分次讀 5 筆資料消耗同等時間,一次讀取是比較好的選擇 但檔案大時 有可能共有 30000 筆資料且 30000 筆資料全部都需要,那一次讀取會快 40 倍 也有可能有 30000 筆資料但只需要其中 1 筆資料,那分次讀取會快 1000 倍 這時候一次讀取跟分次讀取各有勝場,無法比較 需要多少資料是看使用情況決定的,事前沒辦法猜測 可以確定的是,只需要一筆資料的機會不會太低 因為資料是照時間排序的,使用者有可能只需要最新的資料 請問有沒有比較好的方法處理這個問題呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.170.3.244

05/18 00:35, , 1F
用 Memory Mapped File 的方式來讀會好一點
05/18 00:35, 1F

05/18 01:30, , 2F
搞定了,感謝您
05/18 01:30, 2F

05/18 01:33, , 3F
以三萬筆資料來說,讀少資料的話,MMF與分次讀取不相上下
05/18 01:33, 3F

05/18 01:34, , 4F
三萬筆全讀入的話,MMF 比一次讀取慢約四倍,可以接受
05/18 01:34, 4F

05/18 01:36, , 5F
平均效能應該能夠提升不少 ψ( ̄︶ ̄ )
05/18 01:36, 5F

05/18 14:18, , 6F
:) 恭喜
05/18 14:18, 6F
文章代碼(AID): #1A43hrzz (C_and_CPP)
文章代碼(AID): #1A43hrzz (C_and_CPP)