我正在尝试将c#程序迁移到c.
c#程序逐行读取1~5 gb大小的文本文件,并对每行进行一些分析.
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.6 gb文件,此代码大约需要18秒.
我首先编写的用于迁移的c代码如下所示
ifstream f(fname); string line; while (getline(f,line)) { // do some analysis }
ifstream f(fname); char line[2000]; while (f.getline(line,2000)) { // do some analysis }
上面的c大约需要85秒.
FILE *file = fopen ( fname,"r" ); char line[2000]; while (fgets(line,2000,file) != NULL ) { // do some analysis } fclose ( file );
上面的c代码大约需要33秒.
最后两个代码,将行解析为char []而不是字符串,将char []转换为字符串需要大约30秒.
有没有办法提高c / c代码的性能来逐行读取文本文件以匹配c#性能?
(补充:我正在使用带有VC 10.0,x64的Windows 7 64位操作系统)