作者lovex (L O V E X)
看板C_and_CPP
標題[問題] 快速讀檔存取大量資料的方式?
時間Fri Apr 22 15:45:47 2016
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
N/A
問題(Question):
接手別人的code, 想解決讀檔存取資料速度過慢的問題
對像是約40萬筆資料的純文字檔
內容有分段, 部份不重要
主要的段落每一行是三或四個字串
ex: AAAA BBBB CCC (DD)
資料量超過35萬行
目前讀取的方式是開檔後對各行getline,再
1. 透過stringstream來parsing該line的字串並填入Structure後,
2. 以vector<Structure>.push_back入(該Structure)
主要bottleneck即分別在於以上兩個動作
總耗費時間約超過25秒
不知道有更快的方法來取得結構化的資料以利後續使用嗎?
謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.40.146
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1461311150.A.C50.html
→ hichcock: 確定瓶頸不是在 getline ? 04/22 15:51
→ bibo9901: stringstream特慢 04/22 15:52
→ lovex: 把vector改用list約可省近三分之一的時間~ 04/22 15:57
推 Clangpp: 用file吧... 04/22 15:57
→ lovex: 四十萬行getline好像還好,在我機器頂多一兩秒~ 04/22 15:58
→ lovex: stringstream似乎的確有點慢~ 04/22 15:59
→ bibo9901: 或是vector 先 reserve 個30萬左右 04/22 16:12
推 stupid0319: 用SQL存取吧 04/22 18:53
推 EdisonX: 如果檔案還不算特大的話 我會考慮用fread 全dump 到記 04/24 12:48
→ EdisonX: 憶體,用sscanf做 parse,或有些特殊情況自己寫parse也可 04/24 12:48
→ EdisonX: 能較快。 04/24 12:48
→ dritchie: memory map 04/26 00:24