使用 fgets() c++ 读取大型 txt 文件时的 CPU 使用率为 99%



我必须逐行读取大型txt文件(1Gb(,并使用fgets((来执行此操作。我运行一个空的 while 循环,执行时间极长(30 分钟(,CPU 利用率为 99%。

int buffer_size = 30; 字符缓冲区[buffer_size];

 while (fgets(buffer, buffer_size, traceFile1) != NULL)
 {
 }

我确实做了一些阅读,显然与文本解析相关的开销导致了这种情况。所以问题是,有没有办法在避免这种情况的同时读取 txt 文件?我正在读取网络模拟器的跟踪,因此每行通常都有 |Injection_cycle源目的地|

我一直在寻找一段时间,所以如果有人对此有明智的答案,我会非常高兴:)

1GB = 1024MB= 1048576 KB = 1073741824 B 
30 min = 1800 seconds

因此,您基本上是在比较大约 595k/s 的比较(检查当前字符是""还是"\t"或 eof(,并进行大约相同数量的内存同化。不仅如此,而且还要进行跳转操作,因为您有一个循环语句。

这个虽然不太快,但也不是太慢,我见过一些"危急情况",无法正确使用计算机内存系统,结果如何缩放各种尺寸?

我想我宁愿偏离原因,但希望它有所帮助

最新更新