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

作者: lovex (L O V E X)   2016-04-22 15:45:47
開發平台(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秒
不知道有更快的方法來取得結構化的資料以利後續使用嗎?
謝謝!
作者: hichcock (快樂一整年 ^^~~~)   2016-04-22 15:51:00
確定瓶頸不是在 getline ?
作者: bibo9901 (function(){})()   2016-04-22 15:52:00
stringstream特慢
作者: lovex (L O V E X)   2016-04-22 15:57:00
把vector改用list約可省近三分之一的時間~
作者: Clangpp (Clang++)   2016-04-22 15:57:00
用file吧...
作者: lovex (L O V E X)   2016-04-22 15:58:00
四十萬行getline好像還好,在我機器頂多一兩秒~stringstream似乎的確有點慢~
作者: bibo9901 (function(){})()   2016-04-22 16:12:00
或是vector 先 reserve 個30萬左右
作者: stupid0319 (徵女友)   2016-04-22 18:53:00
用SQL存取吧
作者: EdisonX (卡卡獸)   2016-04-24 12:48:00
如果檔案還不算特大的話 我會考慮用fread 全dump 到記憶體,用sscanf做 parse,或有些特殊情況自己寫parse也可能較快。
作者: dritchie (卍~邁斯納效應~卍)   2016-04-26 00:24:00
memory map

Links booklink

Contact Us: admin [ a t ] ucptt.com