我正在写图形库,应该读取最常见的图形格式。一种格式包含这样的信息:解析文件的快速方法?
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 +),我感到非常震惊,这个功能是到目前为止是整个程序中最糟糕的瓶颈:
我用来分析该行的stringstream占总运行时间的近70%,getline命令占用25%。该计划的其余部分仅使用5%。
是否有快速的方式来读取这些大文件,可能避免慢串流和getline函数?
你认为boost :: spirit? – je4d 2012-03-09 00:36:01
如果可能,我想避免增加。 – Listing 2012-03-09 00:36:44
美元doughtnuts,您的C库scanf可以击败所有这些。 :) – Kaz 2012-03-09 00:44:15