Come leggere file con no-cache in Android?
-
11-10-2019 - |
Domanda
Sto lavorando su un'applicazione di prova su piattaforma Android. Testare la scrittura / lettura di velocità al sdcard. Scrivo in linguaggio C con interfaccia NDK.
Per prima cosa ho una scrittura per-loop per creare 256 file con 512 byte casuali in ciascuno. Questa parte funziona bene. I file aperto con la bandiera O_CREAT | O_WRONLY |. O_SYNC e modalità 0666. Dopo chiamata di scrittura, lo faccio sync () per assicurarsi che i dati vengono scritti sulla scheda
Poi ho scrivere un altro 2 livelli per-loop per leggere questi file in regime di prova. Io uso O_RDWR | O_SYNC per aprire il file. Quindi chiamare read ().
Questa è la cosa: se è la prima volta che faccio funzionare la parte di lettura. Il primo ciclo per leggere prendere più tempo rispetto al dopo. Sono sicuro che è perché dopo il primo ciclo, il programma leggere la cache non è il vero carta fisica.
Ho cercato O_DIRECT bandiera a leggere. Ma errore con EINVAL. Nella pagina di manuale di apertura, si dice forse è a causa di questa funzione non implementa dalla piattaforma.
Avete qualche idea su come leggere con no-cache in Android?
Soluzione
Si può avere bisogno di un telefono radicata a disabilitare la cache-a livello di sistema operativo.
http://wiki.cyanogenmod.com/index.php?title=SDCardSpeedTests
Che si occupa anche di fare operazioni su larga abbastanza per sopraffare i buffer on-card.