我正在Android平台上进行测试应用程序。测试对SDCARD的写入/读取速度。我用NDK接口编写C语言。

首先,我编写了一个循环,以创建256个文件,每个文件中的每个文件中的512个随机字节。该部分正常工作。我使用flag o_creat | o_wronly | o_sync和模式0666打开文件。在呼叫写入后,我确实sync()确保数据写在卡上。

然后,我编写另一个2级前面的循环以读取这些文件以测试速度。我使用o_rdwr | O_Sync打开文件。然后致电read()。

这是事实:如果这是我第一次运行读取部分。第一个阅读的循环花费的时间比之后更多。我敢肯定是因为在第一个循环之后,程序读取缓存而不是真实的物理卡。

我已经尝试了o_direct标志来阅读。但是Einval的错误。在打开的“人”页面中,它说也许是因为这个功能未由平台实现。

您是否对如何在Android中使用无循环阅读有任何想法?

有帮助吗?

解决方案

您可能需要一部扎根的手机来禁用操作系统级缓存。

http://wiki.cyanogenmod.com/index.php?title=sdcardsPeedTests

这也要注意进行大型操作,以压倒任何卡上的缓冲区。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top