消息关闭
    暂无新消息!

关于C语言IO输出txt的效率问题

问题作者 : Cleve2017-08-31发布
本人是一个小白,我就是弱弱的想问下一下,我想格式化输出超级多的数据到txt中,比如输出1到100000,以%10.5lf的形式输出,如果是使用循环调用100000次fprintf函数的话是不是会很慢啊,我试了sprintf函数结果速度也是差不多甚至还更慢了!,大神们有没有什么好的办法,可以减少IO的调用啊?最好是格式化把这些合并到一个字符串里边,然后直接输出!谢谢了!~

8个回答

︿ 2
没准只是因为fortran写的文件碎片少;而C写的文件碎片多罢了。
︿ 2
建议楼主试一下,不会你想像的那么慢。
再说你的要求只是100000次。
与其纸上谈兵,不如实际操作一下;
IO是有缓存的,并且也不是你说的调一下fprintf就往文件里写一下,往磁盘写数据先放到缓存里,然后到一定数量了(达到一定字节数)才会真正的刷到文件里。
︿ 2
无profiler不要谈效率!!尤其在这个云计算、虚拟机、模拟器、CUDA、多核 、多级cache、指令流水线、多种存储介质、……满天飞的时代!

不要低估操作系统读写文件使用内存缓冲区优化速度时的智商。
︿ 1

再试一次
换台电脑
重启电脑
……
没准就不是所谓的两倍了。

在文件大小相同的前提下:
 读刚读过的文件比头次读没读过的文件快
 读转速快的硬盘上的文件比读转速慢的硬盘上的文件快
 读没有磁盘碎片的文件比读有磁盘碎片的文件快
 读文件不处理比边读边处理快
 单线程从头到尾一次读文件比多线程分别读文件各部分快(非固态硬盘上)
 读固态硬盘上的文件比读普通硬盘上的文件快
写类似。