2011-09-07 16 views
1

我想我的問題部分來自這個問題:std::ifstream buffer caching.我有一個boost序列化存檔,並且正在按照幫助中的建議,使用&運算符讀出它。我的理解是輸入和輸出操作轉換爲<<>>。現在從上面的問題來看,這些運營商連同fstream,並沒有給出最佳性能。如何最好地讀取boost序列化存檔?

我需要做的是讀取幾個100k對象並依次對它們進行處理,然後刪除它們。現在我從字面上做

  1. 讀取一個對象2.處理它3.刪除它4.重複。

我想知道我是否應該將其更改爲

  1. 閱讀所有對象到隊列2.處理隊列3.刪除一切

或者我是否應該實施一定的緩衝該文件並首先將二進制文件讀入緩衝區?

或者也許開始第二個線程,讓第二個線程讀取文件與某些線程切換?

並部分重複上述問題,但有人有更多的經驗試圖優化fstream的緩衝區,甚至可能是一個工作的例子嗎?

謝謝

+0

您是否編寫過代碼並使用您在正常情況下編寫的代碼測試性能? –

+0

我有。這似乎可以接受。但我想讓它更快。 – Cookie

回答

0

改變它沒有任何意義。默認情況下,無論如何它都會通過緩衝讀取器,而且這個讀取器無論如何都會以4k塊的形式讀取硬盤驅動器。逐一閱讀它們可以更好地回收內存。唯一可能有意義的是將4k更改爲不同的數字。