我必須處理非常大的文本文件(2 GB),它是逐行讀/寫它們的必需。要使用ofstream編寫23百萬行非常慢,所以我開始時嘗試加速在存儲器緩衝區(例如256 MB或512 MB)中寫入大塊行的過程,然後將緩衝區寫入文件。這沒有奏效,表現差不多。閱讀文件時遇到同樣的問題。我知道I/O操作由STL I/O系統緩衝,這也取決於磁盤調度程序策略(由操作系統管理,在我的Linux中)。何時爲I/O(C++)構建自己的緩衝區系統?
有關如何提高性能的任何想法?我一直在考慮在程序正在處理數據時使用後臺子進程(或線程)讀/寫數據塊,但我不知道(主要是在子進程的情況下),如果這將是值得的。
看到這個答案從讀文件直接到串流緩衝區:http://stackoverflow.com/questions/132358/how-to-read-file-content-into-istringstream#138645 – 2008-11-07 17:13:34
你沒有提到你看到的速度。根據物理驅動器的不同,不要指望持續寫入超過40-60 MB/s。使用dd來衡量寫入吞吐量。使用條帶驅動器(例如RAID 0,RAID 1 + 0)來提高吞吐量(在總線關閉之前,最多可驅動約4個驅動器)。 – 2008-11-08 13:28:06