[问题] 快速读档存取大量资料的方式?

楼主: 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