[問題] 快速讀檔存取大量資料的方式?

看板C_and_CPP作者 (L O V E X)時間9年前 (2016/04/22 07:45), 編輯推噓3(309)
留言12則, 7人參與, 最新討論串1/1
開發平台(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

04/22 15:51, , 1F
確定瓶頸不是在 getline ?
04/22 15:51, 1F

04/22 15:52, , 2F
stringstream特慢
04/22 15:52, 2F

04/22 15:57, , 3F
把vector改用list約可省近三分之一的時間~
04/22 15:57, 3F

04/22 15:57, , 4F
用file吧...
04/22 15:57, 4F

04/22 15:58, , 5F
四十萬行getline好像還好,在我機器頂多一兩秒~
04/22 15:58, 5F

04/22 15:59, , 6F
stringstream似乎的確有點慢~
04/22 15:59, 6F

04/22 16:12, , 7F
或是vector 先 reserve 個30萬左右
04/22 16:12, 7F

04/22 18:53, , 8F
用SQL存取吧
04/22 18:53, 8F

04/24 12:48, , 9F
如果檔案還不算特大的話 我會考慮用fread 全dump 到記
04/24 12:48, 9F

04/24 12:48, , 10F
憶體,用sscanf做 parse,或有些特殊情況自己寫parse也可
04/24 12:48, 10F

04/24 12:48, , 11F
能較快。
04/24 12:48, 11F

04/26 00:24, , 12F
memory map
04/26 00:24, 12F
文章代碼(AID): #1N6TQknG (C_and_CPP)