【发布时间】:2012-03-09 00:34:41
【问题描述】:
我正在编写一个应该读取最常见图形格式的图形库。一种格式包含如下信息:
e 4 3
e 2 2
e 6 2
e 3 2
e 1 2
....
我想解析这些行。我在 stackoverflow 上环顾四周,可以找到 neat solution 来执行此操作。我目前使用这样的方法(文件是 fstream):
string line;
while(getline(file, line)) {
if(!line.length()) continue; //skip empty lines
stringstream parseline = stringstream(line);
char identifier;
parseline >> identifier; //Lese das erste zeichen
if(identifier == 'e') {
int n, m;
parseline >> n;
parseline >> m;
foo(n,m) //Here i handle the input
}
}
它工作得非常好并且符合预期,但是今天当我用巨大的图形文件(50 mb+)测试它时,我震惊地发现这个函数是整个程序中迄今为止最严重的瓶颈:
我用来解析行的字符串流使用了几乎 70% 的总运行时间和 25% 的 getline 命令。程序的其余部分仅使用 5%。
有没有一种快速读取这些大文件的方法,可能避免缓慢的字符串流和 getline 函数?
【问题讨论】:
-
你考虑过 boost::spirit 吗?
-
如果可能的话,我想避免提升。
-
美元到甜甜圈,您的 C 库 scanf 可以击败所有这些。 :)
标签: c++ file optimization fstream