我必须逐行读取大型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(,并进行大约相同数量的内存同化。不仅如此,而且还要进行跳转操作,因为您有一个循环语句。
这个虽然不太快,但也不是太慢,我见过一些"危急情况",无法正确使用计算机内存系统,结果如何缩放各种尺寸?
我想我宁愿偏离原因,但希望它有所帮助