我正在尝试将c#程序迁移到C++。 c#程序逐行读取一个1〜5 gb大小的文本文件,并对每行进行一些分析。这个C#代码如下所示。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.6 gb文件,此代码大约需要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秒。
将最后2个代码解析为char []而不是字符串的代码都需要大约30秒的时间才能将char []转换为字符串。
有没有一种方法可以提高c/C++代码的性能来逐行读取文本文件以匹配c#的性能? (补充:我使用Windows用VC++ 10.0 7 64位操作系统,64位)
你的问题是类似于这个线程http://stackoverflow.com/questions/7102087/how-to-enhance-the-speed-of-my-c-program-in-reading-delimited-text-files/ 7102179#7102179 –
一个有趣的问题是:C#如何做到这一点?这会给你一些关于他们使用什么优化的信息,并可能提供一些信息。 – ssube