2012-06-12 52 views
0

我使用std :: fstream將圖像流寫入硬盤。由於大多數硬盤驅動器具有32MB高速緩存,因此創建一個緩衝區以積累高達32MB的圖像數據然後寫入磁盤效率更高,或者將每張圖像寫入磁盤效率更高?更有效地寫入硬盤

+2

我想你會讓緩存工作,並不一定會試圖'幫助'它。 – Randy

+2

你的寫作表現是否真的有問題?如果不是,爲什麼要麻煩? – PlasmaHH

+0

你的平臺是什麼? –

回答

2

緩存用作讀/寫高速緩存,以緩解因排隊問題....這裏是我的經驗與磁盤:

  1. 如果磁盤不是SSD,然後如果你是更好連續寫入,而不是尋求文件..尋求是I/O性能的殺手。
  2. 磁盤通常以扇區大小寫入。扇區大小通常是512b或4k(較新的磁盤)。嘗試一次寫入一個扇區的數據。
  3. 捆綁I/O總是比多個小I/O更快。簡單的原因是磁盤上的處理器有一個較小的隊列來刷新。
  4. 無論你從內存中服務,服務。只有在必要時才使用磁盤。根據您的可靠性策略,您始終可以在寫入時執行修改/無效緩存條目。確保你不交換,所以你的內存緩存大小必須合理,首先。
  5. 如果你正在做這個I/O管理,請確保你的操作系統頁面緩存沒有雙重緩衝。 O_DIRECT爲此。
  6. 如果可靠性不是問題,請使用非阻塞。 O_NONBLOCK
0

系統的每一部分,從fstream下到磁盤驅動程序知道比你的應用程序更多關於具體的效率甚至可以訪問。

如果你嘗試過,你不能改進各種緩衝方案,所以不要打擾。

+0

這可能會也可能不會是真實的。 'fstream'是非常通用的,爲了特定的用途它應該不難打敗。根據他的使用模式和系統,使用'mmap'(或其Windows等價物)或者對數據執行單個系統級寫入可能更快。 (Iostreams主要是面向文本的,而IIUC,他正在編寫二進制數據塊。) –

+0

我不反對。鑑於fstream正在被使用,它確實非常通用,並且在ostream緩衝,文件系統緩衝,磁盤操作排序,磁盤控制器行爲和磁盤硬件技巧之間,添加另一個緩衝層不太可能有所幫助。問題是缺乏一點,當然可以做得更好,但根據我們得到的信息,物理延遲可能占主導地位。 – msw