更快的阅读和更快的处理

时间:2018-01-25 20:35:12

标签: c++

我有一个大文件逐行读取并为每一行做一些处理。我提出了c / c ++中最简单的程序,如下所示,但我想知道我是否可以帮助它加快速度(使用threadingfopenmp等)。

FILE *fp=fopen(argv[1], "r");
char line[500];
while(fgets(line, 500, fp) != NULL){
  line[strlen(line)-1] = '\0';
  /* do dome processing on each line */
  for(int i=0; i<strlen(line)-k+1; i++){
    /* do something for each k-length substring  */    
  } 
}

由于我的文件包含5亿行,因此需要花费大量时间。我尝试使用较小的文件,首先存储行,然后逐个处理行,这更快。在这里,我无法存储所有5亿行,因为它们会占用大量空间。

我是编程新手,所以任何有助于提高效率的帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

此问题更适合代码审核。无论如何,如果你在Windows上,你可以做的一些优化。

  • 对异步IO使用带有OVERLAPPED参数的CreateFile。
  • ReadFile将文件块读入内存
  • 在ReadFile子例程中创建多个std :: thread,每个子程序位于文件的不同部分。

答案 1 :(得分:0)

您可以mmap文本文件,让多个工作线程处理数据。