Fortran Coder

查看: 13350|回复: 5
打印 上一主题 下一主题

[文件读写] 关于文件读写速度的问题

[复制链接]

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

楼主
发表于 2014-2-26 22:23:06 | 显示全部楼层

我倒不觉得是因为文件里是否存在内容而引起的效率差别。
个人认为是硬盘缓存惹的祸。(这个取决于操作系统,乃至硬盘配置)

把你的代码修改如下:
[Fortran] 纯文本查看 复制代码
     program main
     implicit none 
     real*16::x=1.0/3.0q0
     real*16::y=1.0/5.0q0
     integer i
     REAL*4 :: T1,T2
     CALL TTIME(T1)
     open(unit=10,file='x:\xx.dat',status='old') !// 旧文件
     do i=1,1000000
     write(10,*)x
     enddo 
     CLOSE(10,status='delete') !// 删除旧文件
CALL TTIME(T2)
     WRITE(*,*)'写文件耗时:',T2-T1
     CALL TTIME(T1)
     open(unit=10,file='x:\xx.dat',status='new') !// 新建文件
     do i=1,1000000
     write(10,*)y
     enddo  
     CLOSE(10)
     CALL TTIME(T2)
     WRITE(*,*)'写文件耗时:',T2-T1
     pause 
     end 
     
SUBROUTINE TTIME(T)
REAL(4) T,TA(2)
T=ETIME(TA)
     END SUBROUTINE 


运行结果,与你的代码差不多。这说明,先写已经存在的文件更慢,而后写新文件更快。



这说明效率与新旧文件无关,只与先后顺序有关。

712

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
607 元
贡献
311 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-2-27 09:54:34 | 显示全部楼层
流文件是二进制的,本身尺寸就要比文本方式小,输出量就少很多。

另外,内存里的数据是二进制的,直接二进制输出,少了中间的转换过程,速度自然快很多的。

这个问题还有几个已知的影响因素,例如:
硬盘配置(我有一个20G的SSD硬盘和一块常规硬盘,SSD速度可快0.5秒左右)
同时运行的其他应用程序(尤其是大量读写硬盘的程序)

jason 是用 linux 跑的吧?我不甚了解,至少在windows 下,操作系统会有硬盘缓存,执行10000次write,可能执行到8000次的时候,第2000次写入才真正有效(仅举例)。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-4 11:27

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表