2016-03-04 30 views
2

我在使用fwrite在Android jni上寫入一個緩衝區(大小爲460800)到磁盤,大多數時間花費大約10-40ms,這是可以接受的,但有時它會成本500--800ms,即慢,我不能接受。fwrite在android有時非常慢

有沒有人知道爲什麼會發生這種情況?以及如何解決這個問題。

enter image description here

回答

0

系統有時,內部緩衝器保存在FILE你寫刷新到操作系統。偶爾,操作系統會將其保存在其內部緩存中的數據刷新到您正在寫入的閃存上。閃存很慢,所以如果你寫的內存不止可以處理,你必須等待。如果你想讓數據在閃存上結束,這種等待是沒有辦法的。

+0

感謝您的回答,我每次在fwrite之後都會打電話給fflush。這是否意味着每次它將緩衝區寫入真實的磁盤文件? – vaiRonaldo

+0

@vaiRonaldo是的。 'fflush()'會導致這種情況發生。如果您不想每次都等待很長時間,請考慮一次寫入較少量的數據,並且不要經常調用fflush()。 – fuz

+0

@vaiRonaldo如果您正在寫入閃存上的文件,則沒有磁盤。底層物理介質的特性不像磁盤。擦除和寫入Flash頁面需要很長時間,並且沒有辦法。 –