看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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