更有效地写入硬盘

时间:2012-06-12 14:11:58

标签: c++ hard-drive

我正在使用std :: fstream将图像流写入硬盘。由于大多数硬盘驱动器都有32MB缓存,创建一个缓冲区来累积高达32MB的图像数据然后写入磁盘是否更有效,或者将每个图像写入磁盘是否有效?

2 个答案:

答案 0 :(得分:2)

缓存用作读/写缓存以缓解排队引起的问题....以下是我对磁盘的体验:

  1. 如果磁盘不是SSD,那么串行写入比搜索文件更好。寻求是I / O性能的杀手锏。
  2. 磁盘通常以扇区大小写入。扇区大小通常为512b或4k(较新的磁盘)。尝试一次写一个扇区的数据。
  3. Bunching I / O总是比多个小I / O快。原因很简单,磁盘上的处理器有一个较小的队列来刷新。
  4. 无论你能从记忆中得到什么,都要服务。仅在必要时使用磁盘。您始终可以在写入时执行修改/无效的缓存条目,具体取决于您的可靠性策略。确保不要交换,因此您的内存缓存大小必须合理。
  5. 如果您正在执行此I / O管理,请确保不要对操作系统页面缓存进行双重缓冲。 O_DIRECT为此。
  6. 如果可靠性不是问题,请使用非阻塞。 O_NONBLOCK

答案 1 :(得分:0)

系统的每个部分,从fstream到磁盘驱动程序,都比您的应用程序更有效地了解特定的效率。

如果你尝试过,你无法改进各种缓冲方案,所以不要打扰。