我目前正在使用替換選擇和k路合併來處理涉及外部合併排序的項目。我用C++ [在Linux上運行]實現了該項目。它非常簡單,現在只處理固定大小的記錄。提高C++程序的I/O性能[外部合併排序]
對於閱讀&寫我使用(I/O)fstream類。執行該程序幾次後,我注意到
- 對於大於4K(典型塊大小)的請求,I/O讀取塊。事實上,緩衝區大小超過4K會導致性能下降。
- 輸出操作似乎不需要緩衝,linux似乎照顧緩衝輸出。所以我發出一個寫(記錄),而不是保持特殊的寫入緩衝區,然後使用write(records [])立即清除它們。
但是,應用程序的性能似乎不是很好。我怎麼能改善表現?我應該維護特殊的I/O線程來處理讀取塊或者是否存在提供此抽象的現有C++類?(類似於Java中的BufferedInputStream)
簡介第一!對於大於最佳塊大小的性能,性能只會緩慢下降,因此可能不會成爲第一個問題。 – Potatoswatter 2010-04-23 01:49:05
對於> 4096字節的緩衝區,它們是512的精確倍數嗎? – wallyk 2010-04-23 01:51:13
4k的東西是有道理的。這通常是許多文件系統的本地塊大小,也是x86的本地頁面大小。 – 2010-04-23 03:53:51