请教高手指点, 关于 fopen 与 fclose 的性能比较?

xqmarine 2009-04-22 01:45:04
在同一个函数中, fclose和fopen调用的次数一样多, 但fclose占cpu 60.7% , fopen 的cpu占用时间才 9.7% !

另外个函数中, fopen调用两次 0.02% , fclose调用一次 0.01% (我觉的这个似乎正常)


难道fclose更耗性能吗? 无非一个打开文件操作,一个关闭啊, 请知道的高手指点下
...全文
554 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxxer 2009-04-22
  • 打赏
  • 举报
回复
fclose函数会刷缓冲区
lingyin55 2009-04-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xqmarine 的回复:]
数据存储到硬盘不是 fflush吗, fclose函数本身会刷缓冲区吗
[/Quote]

在fclose之前,所有要写入文件的数据都是暂存在缓冲区中的,
这时要写入的文件还是空白,只有执行完fclose之后,才会将缓冲区
的数据写入到文件中。
性能侠客行 2009-04-22
  • 打赏
  • 举报
回复
同一个函数中, fclose和fopen调用的次数一样多, 但fclose占cpu 60.7% , fopen 的cpu占用时间才 9.7% !

另外个函数中, fopen调用两次 0.02% , fclose调用一次 0.01% (我觉的这个似乎正常

fopen 一般是读目录扇区,然后查找是否存在该文件.(以fat为例,一个目录项只有32 bytes ,所以 一般情况下读目录扇区,也是几个扇区).
因此,cpu 耗费小了.

fclose 时候,一般会将剩下数据写到 硬盘介质中,而且,通常会 写fat 表与目录项.
这个时间,肯定比fopen时间长的...

有兴趣可以看看 linux src ..看看fs 相关代码.

xqmarine 2009-04-22
  • 打赏
  • 举报
回复
数据存储到硬盘不是 fflush吗, fclose函数本身会刷缓冲区吗
  • 打赏
  • 举报
回复
这个主要还是由于文件IO的全缓冲模式,加上fwrite偷懒,导致的.

如果是不带缓冲区的设备,就不会导致fclose这么低效了,像stderr就是不带缓冲的.
  • 打赏
  • 举报
回复
fclose在关闭文件描述符之前还要冲洗缓冲区呢.
liliangbao 2009-04-22
  • 打赏
  • 举报
回复
可能在fclose的时候才写文件,因为这时最消耗时间~
而打开后都是先暂存在内存中,这样节省时间~
I11 2009-04-22
  • 打赏
  • 举报
回复
没有代码,不好说原因
感觉和打开文件以后对文件的操作有关系,比如写入一些数据,实际上os并没有当时写入磁盘,而是在fclose的时候写入

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧