Question

Je travaille sur une application de test sur la plateforme Android. Testez d'écriture / vitesse de lecture à la carte SD. Je vous écris en langage C avec interface NDK.

D'abord je écrire une boucle for pour créer 256 fichiers avec 512 octets aléatoires dans chaque. Cette partie fonctionne très bien. Je fichier ouvert avec le drapeau O_CREAT | O_WRONLY |. O_SYNC et le mode 0666. Après écriture d'appel, je fais de synchronisation () pour vous assurer que les données sont écrites sur la carte

Alors j'écris une autre 2 niveaux pour en boucle pour lire ces fichiers à la vitesse d'essai. J'utilise O_RDWR | O_SYNC pour ouvrir le fichier. Puis appelez read ().

Voici la chose: Si c'est la première fois que je lance la partie de lecture. La première boucle de lecture prendre plus de temps que l'après. Je suis sûr que c'est parce que, après la première boucle, le programme a lu le cache pas la vraie carte physique.

J'ai essayé drapeau O_DIRECT à lire. Mais il erreur avec EINVAL. Dans la page de manuel pour ouvrir, il dit peut-être qu'il est à cause de cette fonction ne mettre en œuvre par la plate-forme.

Avez-vous une idée sur la façon de lire sans-cache dans Android?

Était-ce utile?

La solution

Vous pouvez avoir besoin d'un téléphone rooté pour désactiver la mise en cache de niveau du système d'exploitation.

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

Cela prend également soin de faire des opérations assez grand pour submerger les tampons sur les cartes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top