现在的位置: 首页 > 综合 > 正文

WriteFileEx 与WriteFile 区别

2013年09月02日 ⁄ 综合 ⁄ 共 841字 ⁄ 字号 评论关闭

如下来自群友对话,有待整理

WriteFileEx 与WriteFile 在批量文件访问,速度差异,才明显,才会反应出WriteFileEx的优势出来

 用ovlp的好处,就是不用移动文件指针
随即按访问方便 
 因为不在系统缓存上缓存 
 所以就要快点
但是不是绝对的
因为你自己不缓存访问的话
可以导致磁盘效率降低
整体速度都会下降

 因为用了FILE_FLAG_NO_BUFFERING标志后
可能引起磁盘寻道次数增加
系统缓存对磁头的优化减少了
 在大量文件读写,并且有要求的时间
FILE_FLAG_NO_BUFFERING标志是必须的
虽然可能减慢速度,但是提高了 IO投递效率
降低的速度可以再其他环节优化后,恢复

可以减少磁盘等待时间

 2次访问时间间隔明显减少
也就是单位时间内,访问次数明显提高
降低磁盘速度,是由于磁盘寻道引起的
由于大量的请求下,磁盘磁头移动频率上升的话 

 磁盘寻道是在进行位置偏移处理吗?基本可以这样理解
 所以高性能的磁盘访问
离不开这个
但是磁盘上,也需要进行优化
同步读写,会让磁盘长时间等待
异步访问,移动文件指针麻烦
 基于ovlp可以克服上述2个问题
适合并发的,大规模访问 
 “同步读写,会让磁盘长时间等待”是因为时间有浪费在系统分配的缓存上,对吗?
 也不光是这个
因为你投递请求,是需要时间的,

 一个请求完成,才接受另外1个 
 异步的请求,是可以 先请求,后完成的
 

 不用ovlp 

每次读写,你肯定要进行文件指针的设置啊
这样才能到正确的位置 ,

 这不利于并发访问,访问比较麻烦 
 每次投递,都是一切都准备好了 
 磁盘只需要直接操作就Ok了
所以效率最高
在磁盘IO队列上
所有请求已经预先排队了

所以,多次操作过程,无需等待,即可进行

 Ovlp在驱动里,实际对应的就是 Offset,以及IOStatsBlock
还有就是完成事件 
 Ovlp实际的参数,对于文件访问来说,就是文件的偏移
看Ovlp结构就明白了 

 WriteFileEx可以让用户自己实现线程池
WriteFile实现的话,效率要低点 

抱歉!评论已关闭.