c# – c文本文件读取性能
发布时间:2020-12-15 08:28:35 所属栏目:百科 来源:网络整理
导读:我正在尝试将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(); //
我正在尝试将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.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秒. 最后两个代码,将行解析为char []而不是字符串,将char []转换为字符串需要大约30秒. 有没有办法提高c / c代码的性能来逐行读取文本文件以匹配c#性能? 解决方法
提高文件读取性能的最佳方法之一是使用内存映射文件(Unix上的mmap(),Windows上的CreateFileMapping()等).然后,您的文件在内存中显示为一个平坦的字节块,您可以比缓冲I / O更快地读取它.
对于大于千兆字节左右的文件,您将需要使用64位操作系统(使用64位进程).我这样做是为了处理一个30 GB的Python文件,效果很好. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |