我正在尝试将一个C#程序迁移到C++。 该C#程序逐行读取一个大小为1 ~ 5 GB的文本文件,并对每一行进行一些分析。 以下是C#代码。
using (var f = File.OpenRead(fname))
using (var reader = new StreamReader(f))
while (!reader.EndOfStream) {
var line = reader.ReadLine();
// do some analysis
}
对于一个包含700万行的1.6GB文件,该代码大约需要18秒钟。
我首先编写的用于迁移的C++代码如下:
ifstream f(fname);
string line;
while (getline(f, line)) {
// do some analysis
}
上面的c++代码大约需要420秒。我写的第二个c++代码如下所示。
ifstream f(fname);
char line[2000];
while (f.getline(line, 2000)) {
// do some analysis
}
上述的C++代码大约需要85秒时间。
我尝试的最后一段代码是C语言,如下所示:
FILE *file = fopen ( fname, "r" );
char line[2000];
while (fgets(line, 2000, file) != NULL ) {
// do some analysis
}
fclose ( file );
以上的c代码需要大约33秒。
最后两个代码将行解析为char[]而不是字符串,需要额外30秒将char[]转换为字符串。
是否有一种方法可以提高C/C++代码的性能,逐行读取文本文件以匹配C#的性能? (添加:我使用的是Windows 7 64位操作系统,VC++ 10.0,x64)