2

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

首先,我编写了一个 for 循环来创建 256 个文件,每个文件有 512 个随机字节。这部分工作正常。我打开带有标志 O_CREAT|O_WRONLY|O_SYNC 和模式 0666 的文件。在调用 write 之后,我执行 sync() 以确保数据已写入卡上。

然后我编写了另一个 2 级 for 循环来读取这些文件以测试速度。我使用 O_RDWR|O_SYNC 打开文件。然后调用 read()。

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

我试过 O_DIRECT 标志来读取。但它与 EINVAL 错误。在打开的手册页中,它说可能是因为该功能没有被平台实现。

您对如何在 Android 中使用无缓存读取有任何想法吗?

4

1 回答 1

0

您可能需要有根手机才能禁用操作系统级缓存。

https://web.archive.org/web/20120531024443/http://wiki.cyanogenmod.com/index.php?title=SDCardSpeedTests

这还需要注意进行足够大的操作以压倒任何卡上缓冲区。

于 2010-11-16T18:06:07.657 回答