我正在尝试将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位操作系统)