找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 3687|回复: 1

VFP的fopen函数缓冲与非缓冲区别

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2010-5-8 19:56:21 | 显示全部楼层 |阅读模式
上社一些foxer经常问我VFP的一些函数缓冲与非缓冲区别的问题,最典型的就是fopen()这一经常用到的函数。其实,缓冲与非缓冲是操作系统层面的问题,并非VFP一门语言所独有,下面我就给大家分享一下,我对缓冲与非缓冲的理解。
  上社一些foxer经常问我VFP的一些函数缓冲与非缓冲区别的问题,最典型的就是fopen()这一经常用到的函数。其实,缓冲与非缓冲是操作系统层面的问题,并非VFP一门语言所独有,下面我就在开心上社上给大家分享一下,我对缓冲与非缓冲的理解。
  前面已经说过,缓冲与非缓冲是操作系统层面的问题,也就是file I/O读写的操作。
  简单说,一个计算机,最主要四大件:显示器,CPU,内存,硬盘。计算机内的信息都是以二进制数据的形式保存,这些数据可以长时间保存在硬盘中,即时地保存在内存上,即时地在CPU上进行运算,而显示在显示器上的数据则一般是保存在内存或者显存(独立显卡)上。由此可知,数据“保存”在硬盘上,“临时储存”在内存上,而CPU则是对数据进行修改性运算的。
  有了上面对计算机硬件的了解,我们就不难理解什么是缓冲,什么是非缓冲了。
  所有程序语言,包括VFP,它们的函数都是一些指导CPU进行运算的指令,每一个需要操作文件的指令,比如fopen(),都是需要先把硬盘上的数据,读取过来,然后再进行运算,最后保存回硬盘上。
  结合前面对硬件的了解,我们不难看出,在数据的“读取—运算—回存”过程中,是存在差别的,这差别就是缓冲与非缓冲的区别。
  应用了缓冲技术的“读取—运算—回存”过程,数据流是这样的:CPU先在内存上开辟一块区域,然后硬盘读取数据,临时存在内存开辟的那片指定区域上,当这片区域存储满的时候,CPU再对这些数据进行运算;运算完,再储存到内存的指定区域,当内存指定区域存满的时候,再一次性保存回硬盘,实现长期储存。
  而非缓冲呢,则是,CPU直接到硬盘读取数据储存为内存变量,读取一点,就马上运算一点,运算完直接存回硬盘。
  由此可知,当数据量小的时候,非缓冲I/O是系统直接的输入和输出,它不经过“缓冲区”,所以从速度和效率方面来说就显得快很多,但是当数据量比较大的时候,非缓冲I/O频繁地读取和储存数据,在速度和效率就会大打折扣。
  OK,前面就是开心上社站长对缓冲与非缓冲的一些理解,非常浅显,希望权威人士能够予以斧正。

来源:http://www.kxss.net/kxssweb/kxssIT/2010/0430/77.html
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

16

主题

81

回帖

0

精华

银牌会员

积分
611
发表于 2010-5-9 12:33:12 | 显示全部楼层
VFP,用的人不多了吧
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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