我必须逐行读取大型txt文件(1Gb),并使用fgets()来执行此操作。我运行一个空的while循环,并且执行需要非常长的时间(30分钟),CPU利用率为99%。
int buffer_size = 30; char buffer [buffer_size];
while (fgets(buffer, buffer_size, traceFile1) != NULL)
{
}
我确实做了一些阅读,显然与文本解析相关的开销导致了这一点。所以问题是,有没有办法在txt文件中读取同时避免这种情况?我正在阅读网络模拟器的跟踪,因此每一行通常都有| Injection_cycle source destination |
我一直在寻找一段时间,所以如果有人对此有一个明智的答案,我会非常高兴:)
答案 0 :(得分:0)
1GB = 1024MB= 1048576 KB = 1073741824 B
30 min = 1800 seconds
所以你基本上比较了大约595k / s的比较(检查当前角色是' \ n'或者' \ t'还是eof)并且大约相同的内存量幽会。不仅如此,还要进行跳转操作,因为你有一个循环语句。
虽然速度不是太快,但也不会太慢,我已经看过一些"关键案例"无法正确使用计算机内存系统,结果如何扩展到各种尺寸?
我认为我不是原因,但希望有所帮助