2016-03-04 5 views
2

Я использовал fwrite для записи буфера (размером 460800) на диск в android jni, в большинстве случаев он стоил около 10-40 мс, и это приемлемо, но иногда это будет стоит 500--800 мс, то есть медленно, и я не могу это принять.fwrite in android иногда очень медленно

Является ли anyOne известным, почему это происходит? И как решить этот вопрос.

enter image description here

ответ

0

Occassionally, внутренний буфер хранится в FILE вы пишете промывается в операционную систему. Случайно, операционная система сбрасывает данные, которые она хранит во внутреннем кеше, на флэш-память, на которую вы пишете. Флэш-память медленная, поэтому, если вы пишете больше, чем может обрабатывать память, вам нужно подождать. Нет никакого способа обойти это, если вы хотите, чтобы данные попали во флэш-память.

+0

спасибо за этот ответ, я вызвал fflush после fwrite каждый раз. означает, что каждый раз, когда он будет писать буфер в реальный файл диска? – vaiRonaldo

+0

@vaiRonaldo Да. 'fflush()' вызывает именно это. Если вы не хотите ждать очень долго каждый раз, подумайте о записи меньших объемов данных за раз и не называйте 'fflush()' так часто. – fuz

+0

@vaiRonaldo, если вы пишете файл во флеше, нет диска. Характеристики основного физического носителя не похожи на диск. Стирание и запись flash-страницы занимает много времени, и нет никакого способа обойти это. –

Смежные вопросы