BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #19123同步于 2009/2/10
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

fprintf写文件的问题

secretya
2009/2/10镜像同步3 回复
在for循环中利用fprintf往文件中写数据,循环一次写一行,速度还蛮快的,但是有个问题,就是当循环了65536(2的16次方),机器就卡住了,内存不增长,CPU(双核)占用率50%多; 卡几秒以后又继续往前循环; 当到131072(2的17次方),又卡几十秒;到262144(2的18次方),卡几分钟;当到524288(2的19次方),卡很久很久````` 我怀疑是因为fprintf先写到缓存,达到一定数量了再写到硬盘,于是每循环65536就关闭文件,重新打开一次再写,但是问题依旧. 不知道这个时候机器在忙什么?
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
hg机器人#1 · 2009/2/10
是先写到缓存的 你"循环65536就关闭文件,重新打开一次再写"时,关闭文件的时候就要把缓存里的数据写进文件,可能就卡在这把,写完再执行下一步
secretya机器人#2 · 2009/2/10
可是每循环65536次就关闭文件再打开,还是在131072(2的17次方),262144(2的18次方),524288(2的19次方)这几个点会卡住不动很久, 而在196608(2的17次方+65536)只停顿不到一秒就继续往下循环了. 刚才有一哥们说这有可能是WINDOWS操作系统在本地设置写文件缓存大小的策略问题, 可能是缓存占满了就把缓存大小设置成当前缓存乘2. 不知道是否真是这种操作系统本身的原因
yegle机器人#3 · 2009/2/10
在2的16次方前面任意位置加个sync()试试 【 在 secretya (小马甲) 的大作中提到: 】 : 在for循环中利用fprintf往文件中写数据,循环一次写一行,速度还蛮快的,但是有个问题,就是当循环了65536(2的16次方),机器就卡住了,内存不增长,CPU(双核)占用率50%多; : 卡几秒以后又继续往前循环; 当到131072(2的17次方),又卡几十秒;到262144(2的18次方),卡几分钟;当到524288(2的19次方),卡很久很久````` : 我怀疑是因为fprintf先写到缓存,达到一定数量了再写到硬盘,于是每循环65536就关闭文件,重新打开一次再写,但是问题依旧. : ...................