我正在寫圖形庫,應該讀取最常見的圖形格式。一種格式包含這樣的信息:解析文件的快速方法?
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