我正在處理基於回調中的數據的回調函數,我想寫入不同的文件。C++多次寫入文件的高效方法
例如,在一次調用中,我可能想寫入january.csv,而在另一次調用不同數據時,它可能是july.csv。沒有預先確定的順序,它可能是每個回調中的任何月份,我無法事先知道。 january.csv(實際上所有的月份)都會被寫入多次。
這些回調發生得非常快,所以我需要這個代碼儘可能高效。
天真的方法,我會採取將每次使用下面的代碼:
ofstream fout;
fout.open(month_string);
fout<<data_string<<endl;
fout.close();
的問題是,這似乎並沒有很有效的,因爲我不斷地打開/關閉month.csv文件。有沒有更快捷的方法可以讓january.csv,february.csv等所有的時間都開放,讓這個更快?
編輯:我正在寫入Linux上的/ dev/shm,所以I/O延遲並不是真正的問題。
爲什麼不能有多個'std :: ofstream'對象?每個月一個?像他們的數組? – chrisaycock 2013-03-19 14:39:11
這是可能的,但我的上面的例子是人爲設計的,實際上,我有超過12個ofstream物體,數量接近10,000。我將不得不在每個回調中循環10,000個數組,這比fout.open()和fout.close()慢。 – user788171 2013-03-19 14:56:28
你真的爲每個回調寫入10K文件嗎?或者,你是否只爲每個回調寫入一個特定的文件?如果是後者,那麼你如何決定要寫入哪個文件?任何你可以從'std :: ofstream'對象的輸入中使用'std :: map'或'std :: unordered_map'的機會? – chrisaycock 2013-03-19 14:59:55