Frage

Ich arbeite an einer Testanwendung auf Android-Plattform. Testen Sie die Schreib- / Lesegeschwindigkeit auf die SD-Karte. Ich schreibe in C-Sprache mit NDK-Schnittstelle.

Zuerst schreibe ich eine for-Schleife in jedem 256 Dateien mit 512 zufälligem Bytes zu erstellen. Dieser Teil funktioniert gut. Ich geöffnete Datei mit Flagge O_CREAT | O_WRONLY |. O_SYNC und Modus 0666. Nach dem Aufruf schreiben, ich tue sync (), um sicherzustellen, dass die Daten auf der Karte geschrieben

Dann schreibe ich eine weitere 2-Level-for-Schleife diese Datei zu Prüfgeschwindigkeit zu lesen. Ich benutze O_RDWR | O_SYNC die Datei zu öffnen. Dann lesen () aufrufen.

Hier ist das Ding: Wenn es das erste Mal ist, laufe ich den Leseteil. Die erste Schleife lesen Sie mehr Zeit in Anspruch nehmen als die nach. Ich bin sicher, ist es, weil nach der ersten Schleife, Programm des Cache nicht die reale physische Karte lesen.

Ich habe O_DIRECT Flagge versucht, zu lesen. Aber es mit EINVAL Fehler. In der Manpage zu öffnen, heißt es vielleicht ist es wegen der diese Funktion nicht von der Plattform implementieren.

Haben Sie eine Idee, wie man ohne-Cache in Android zu lesen?

War es hilfreich?

Lösung

Sie müssen möglicherweise ein verwurzeltes Telefon deaktivieren Betriebs-Caching auf Systemebene.

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

Das kümmert sich auch um Operationen groß genug, um zu tun, alle On-Card-Puffer zu überwältigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top