文件有几百兆,每一行一条数据,包含多个以空格分隔的数字。
用fscanf读入的时候,速度很快,平均不到1us
尝试用read先全部读入内存,然后用sscanf读出。发现sscanf很慢,平均在30ms左右。
看到其他人也有这样的情况:
http://bbs.chinaunix.net/thread-1389512-1-1.html
不解为何。
后来尝试用read先全部读入,然后用atoi逐一去读每个数字(atoi比较好用的地方是能自动处理空白字符),发现速度竟然最快。
因此,有如下总结:
read+atoi 快于 fscanf 快于read+sscanf
本文通过对比文件处理三种方法的效率:使用fscanf直接读取,先使用read全读入内存再使用sscanf读取,以及使用read全读入后再使用atoi逐个读取数字,揭示了不同方法在处理大文件时的性能差异。实验结果显示,read+atoi方法在处理包含多个以空格分隔数字的大文件时速度最快。
548

被折叠的 条评论
为什么被折叠?



