我正在使用 std::fstream 将图像流写入硬盘。由于大多数硬盘驱动器都有 32MB 的缓存,是创建一个缓冲区以累积高达 32MB 的图像数据然后写入磁盘更有效,还是将每个图像都写入磁盘更有效?
问问题
993 次
2 回答
2
缓存用作读/写缓存,以缓解由于排队引起的问题……以下是我使用磁盘的经验:
- 如果磁盘不是 SSD,那么串行写入比寻找文件更好。寻找是 I/O 性能的杀手。
- 磁盘通常以扇区大小写入。扇区大小通常为 512b 或 4k(较新的磁盘)。尝试一次写入一个扇区的数据。
- 捆绑 I/O 总是比多个小型 I/O 快。简单的原因是磁盘上的处理器有一个较小的队列要刷新。
- 无论你能凭记忆服务,服务。仅在必要时使用磁盘。您始终可以在写入时执行修改/无效缓存条目,具体取决于您的可靠性策略。确保你不交换,所以你的内存缓存大小必须是合理的,开始。
- 如果您正在执行此 I/O 管理,请确保您没有使用操作系统页面缓存进行双重缓冲。O_DIRECT 为此。
- 如果可靠性不是问题,请使用非阻塞。O_NONBLOCK
于 2012-06-12T14:14:31.037 回答
0
系统的每个部分,从fstream
磁盘驱动程序到磁盘驱动程序,都比您的应用程序更了解特定效率。
如果您尝试过,您无法改进各种缓冲方案,所以不要打扰。
于 2012-06-12T14:20:22.677 回答