我使用std :: fstream將圖像流寫入硬盤。由於大多數硬盤驅動器具有32MB高速緩存,因此創建一個緩衝區以積累高達32MB的圖像數據然後寫入磁盤效率更高,或者將每張圖像寫入磁盤效率更高?更有效地寫入硬盤
Q
更有效地寫入硬盤
0
A
回答
2
緩存用作讀/寫高速緩存,以緩解因排隊問題....這裏是我的經驗與磁盤:
- 如果磁盤不是SSD,然後如果你是更好連續寫入,而不是尋求文件..尋求是I/O性能的殺手。
- 磁盤通常以扇區大小寫入。扇區大小通常是512b或4k(較新的磁盤)。嘗試一次寫入一個扇區的數據。
- 捆綁I/O總是比多個小I/O更快。簡單的原因是磁盤上的處理器有一個較小的隊列來刷新。
- 無論你從內存中服務,服務。只有在必要時才使用磁盤。根據您的可靠性策略,您始終可以在寫入時執行修改/無效緩存條目。確保你不交換,所以你的內存緩存大小必須合理,首先。
- 如果你正在做這個I/O管理,請確保你的操作系統頁面緩存沒有雙重緩衝。 O_DIRECT爲此。
- 如果可靠性不是問題,請使用非阻塞。 O_NONBLOCK
0
系統的每一部分,從fstream
下到磁盤驅動程序知道比你的應用程序更多關於具體的效率甚至可以訪問。
如果你嘗試過,你不能改進各種緩衝方案,所以不要打擾。
+0
這可能會也可能不會是真實的。 'fstream'是非常通用的,爲了特定的用途它應該不難打敗。根據他的使用模式和系統,使用'mmap'(或其Windows等價物)或者對數據執行單個系統級寫入可能更快。 (Iostreams主要是面向文本的,而IIUC,他正在編寫二進制數據塊。) –
+0
我不反對。鑑於fstream正在被使用,它確實非常通用,並且在ostream緩衝,文件系統緩衝,磁盤操作排序,磁盤控制器行爲和磁盤硬件技巧之間,添加另一個緩衝層不太可能有所幫助。問題是缺乏一點,當然可以做得更好,但根據我們得到的信息,物理延遲可能占主導地位。 – msw
相關問題
- 1. 如何有效地將傳入數據寫入磁盤?
- 2. 寫開關更有效地
- 3. 寫入硬盤驅動器的時間
- 4. 遞增地將XML XDocument寫入磁盤,保存有效的XML
- 5. 性能:更好地從硬盤解壓?
- 6. 同時有2個以上的硬盤讀取/寫入
- 7. 如何更有效地寫這個jQuery?
- 8. 如何有效地寫入F#文件?
- 9. C#將字符更有效地寫入2維數組
- 10. 這個Python代碼可以更有效地寫入嗎?
- 11. 可以更有效地寫入此JavaScript嗎?
- 12. 這可以隱藏列代碼更有效地寫入?
- 13. 硬盤掃描的CPU消耗等效
- 14. 硬盤
- 15. 在硬盤上的填充文件中寫入硬編碼的數據
- 16. 硬盤或硬盤驅動器
- 17. Postgres/PostGIS SQL更新儘管沒有創建任何新數據,硬盤硬盤仍然硬着陸
- 18. 什麼是現代固態硬盤的原子寫入單元?
- 19. 如何將文件讀/寫入java中的硬盤驅動器?
- 20. 將文本讀取並寫入硬盤上的單獨文件
- 21. iTextSharp從硬盤讀取pdf模板並寫入文本
- 22. 寫入硬盤錯誤 - 打開文件過多
- 23. 爲硬盤讀取和寫入創建事件
- 24. 將文件寫入百萬次,破壞我的硬盤嗎?
- 25. 確定硬盤驅動器的讀取/寫入速度
- 26. 將文件寫入隨機非連續硬盤位置
- 27. 如何將數組的內容寫入硬盤
- 28. 如何在Firefox中讀取/寫入硬盤中的文件?
- 29. 如何使用Firefox插件從硬盤讀取/寫入文件?
- 30. 如何在我的硬盤上寫入XML到GetRequestStream
我想你會讓緩存工作,並不一定會試圖'幫助'它。 – Randy
你的寫作表現是否真的有問題?如果不是,爲什麼要麻煩? – PlasmaHH
你的平臺是什麼? –