C 在android中编写有时非常慢

C 在android中编写有时非常慢,c,java-native-interface,C,Java Native Interface,我用fwrite在android jni中向磁盘写入一个缓冲区(大小为460800),大多数情况下大约需要10-40ms,这是可以接受的,但有时需要500-800ms,也就是说速度太慢,我不能接受 有人知道为什么会这样吗?以及如何解决这个问题 有时,您写入的文件中保存的内部缓冲区会刷新到操作系统中。有时,操作系统会将其内部缓存中的数据刷新到您正在写入的闪存中。闪存速度很慢,因此如果写入的内容超出了内存的处理能力,则必须等待。如果您想将数据存储在闪存上,那么等待是无法避免的。谢谢您的回答,每次写完

我用fwrite在android jni中向磁盘写入一个缓冲区(大小为460800),大多数情况下大约需要10-40ms,这是可以接受的,但有时需要500-800ms,也就是说速度太慢,我不能接受

有人知道为什么会这样吗?以及如何解决这个问题


有时,您写入的
文件中保存的内部缓冲区会刷新到操作系统中。有时,操作系统会将其内部缓存中的数据刷新到您正在写入的闪存中。闪存速度很慢,因此如果写入的内容超出了内存的处理能力,则必须等待。如果您想将数据存储在闪存上,那么等待是无法避免的。

谢谢您的回答,每次写完fwrite后我都会打电话给fflush。这是否意味着每次它都会将缓冲区写入真实磁盘文件?@vaiRonaldo是的
fflush()
正是这种情况发生的原因。如果你不想每一次等待很长时间,考虑每次写少量的数据,不要频繁调用<代码> FFLUHUE()/<代码> @ Valoaldoo如果你在Flash上写入一个文件,则没有磁盘。底层物理介质的特性与磁盘不同。擦除和写入闪存页需要很长时间,这是没有办法的。@Martin James如果写入大小是闪存页大小的倍数(在页面边界上),至少可以避免重复的部分页面更新。@Martin James我正在连接android SD卡,它是闪存还是磁盘?闪存和磁盘有什么区别?