performance - 使用 FILE_FLAG_NO_BUFFERING 会返回明显的速度增益吗?

标签 performance winapi file-io

最近在 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,缩略图显示速度是否会在普通用户中表现出明显的差异?

最佳答案

哦主不。您可以通过使用该标志使其速度显着变慢。它绕过了文件系统缓存,这是一段美妙的代码,可以以几乎通灵的准确度猜测您在读取 ​​N 后是否想要读取扇区 N+1。如果价格便宜,只需预加载它。

这对写作尤其不利,这就是该选项存在的原因,您不会得到懒惰的回写。这意味着您的程序只能以磁盘写入的速度运行。这是非常非常缓慢的。标志的优点是您可以确定它已被写入。帮助实现事务性磁盘更新,这是 dbase 引擎关心的类型。

但是你自己试试看效果。

关于performance - 使用 FILE_FLAG_NO_BUFFERING 会返回明显的速度增益吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4574996/

相关文章:

performance - Magento 2 TTFB 在几个小时后变高

java - 在循环中重用 StringBuilder 会更好吗?

Java Mission Control 显示 "few profiling samples",为什么,我的其他选项是什么?

windows - Spy++ 如何构建它的进程列表?

c++ - 从主应用程序中取消停靠子窗口

python - 恢复用 Python 写入大文件

python - 在 Python 中查找扩展名为 .txt 的目录中的所有文件

performance - 使用 Group By 和 Like 的 Impala 查询性能低下

c++ - 创建临时文件 : can't write to it

java.io.StreamCorruptedException : invalid stream header: 00000001