我有一個要求,我必須緩衝大量數據(以GB爲單位),以備將來使用。 由於沒有足夠的RAM可用於緩衝這麼大量的數據,因此我決定將這些數據存儲在一個文件中。將數據寫入文件:fflush()需要很長時間
現在這裏的缺陷是,在我將數據寫入文件時,其他線程可能需要「緩衝」數據,因此每次寫入數據時都必須刷新文件流。準確地說,數據是我作爲預先記錄的數據(如TiVo)緩衝的視頻幀,其他線程可能或可能不想在任何給定的時間點寫入它,但是當它們這樣做時,它們將從文件fread
和處理幀。
在一般情況下,fwrite
- fflush
組合需要大約150 us,但偶爾(並且相當有規律),組合需要超過1.5秒。我不能負擔得起,因爲我必須實時處理幀。
我有很多問題在這裏:
是我在文件中緩存數據的方法正確嗎?我有什麼替代方案?
任何想法爲什麼fwrite-fflush操作在某些場合突然需要更多時間?請注意,在1.5秒後,它會恢復到150 us。
關於您對使用內存映射文件的評論,可以將幾個GB的文件映射到內存?我有512 MB內存在我的處置。另外,內存映射如何使事情變得簡單? – puffadder
是的,只要您的CPU地址空間可以處理它,文件大小並不重要。使用32位CPU,您可以管理大約3.5GB文件,使用64位CPU,文件大小無關緊要。至於簡單:http://en.wikipedia.org/wiki/Memory-mapped_file基本上,它允許您訪問文件,就好像它是內存中的一個字節數組。 –