使用FILE_FLAG_NO_BUFFERING将返回明显的速度增益?

9da*_*dan 6 performance file-io winapi

最近注意到MSDN中FILE_FLAG_NO_BUFFERING标志的详细描述,并阅读了几个关于Windows中无缓冲I/O的Google搜索结果.

http://msdn.microsoft.com/en-us/library/aa363858(v=vs.85).aspx

我现在想知道,在文件I/O编程中考虑无缓冲选项是否真的很重要?因为许多程序使用普通的旧C流I/O或C++ iostream,所以我之前没有注意过FILE_FLAG_NO_BUFFERING标志.

假设我们正在开发像Picasa这样的照片浏览器程序.如果我们实现无缓冲的I/O,缩略图显示速度是否会在普通用户中显示出明显的差异?

Han*_*ant 13

哦,主啊.使用该标志可以大大降低速度.它绕过了文件系统缓存,这段精彩的代码可以用几乎通灵的精确度来猜测你读取N后你想要读取扇区N + 1.如果它便宜就可以预先加载它.

写入特别糟糕,这就是选项存在的原因,你没有得到懒惰的回写.这意味着您的程序只能以磁盘可写的速度运行.这非常非常慢.旗帜的优点是你可以确定它是写的.帮助实现事务磁盘更新,这是dbase引擎关心的类型.

但是请亲自尝试看看效果.


Gab*_*abe 7

不,此标志不适用于典型的磁盘用户.它适用于像数据库这样的程序,它们需要执行自己的文件缓存管理以获得最佳性能.虽然我确信你可以找到加速你的程序的情况,但大多数情况下你会想要使用操作系统提供的缓冲 - 这就是它存在的原因.

  • @ Brain2000:你有什么不同意的?我说"这是为了需要执行自己的文件缓存管理以获得最佳性能的程序",并且您提供了这样一个程序的示例.听起来你真的同意我的观点. (3认同)