Pregunta

Estoy trabajando en una aplicación de prueba en la plataforma Android. Pruebe el / la velocidad de lectura de escritura a la tarjeta sd. Escribo en lenguaje C con interfaz NDK.

Primero escribo un ciclo for para crear 256 archivos con 512 bytes aleatorios en cada uno. Esta parte funciona bien. Me archivo abierto con la bandera O_CREAT | O_WRONLY |. O_SYNC y el modo de 0666. Después de llamada de escritura, lo hago sync () para asegurarse de que los datos se escriben en la tarjeta

Luego escribir otra de 2 niveles de bucle para leer estos archivos a la velocidad de la prueba. Yo uso O_RDWR | O_SYNC para abrir el archivo. Luego llame a read ().

Aquí está la cosa: Si es la primera vez que ejecute la parte de lectura. El primer bucle para leer tomar más tiempo que el después. Estoy seguro de que es porque después del primer bucle, el programa lee la memoria caché no la tarjeta física real.

He intentado bandera O_DIRECT de leer. Pero con error EINVAL. En la página del manual abierto, se dice que tal vez es porque de esta función no implementa por la plataforma.

¿Tiene alguna idea de cómo leer con no-cache en Android?

¿Fue útil?

Solución

Puede que necesite un teléfono raíces para deshabilitar el almacenamiento en caché a nivel de sistema operativo.

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

Esto también se encarga de hacer las operaciones lo suficientemente grande como para aplastar cualquier búfer en la misma tarjeta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top