2012-10-24 26 views
14

La mia applicazione Android utilizzerà file grandi e molto grandi (ad esempio tra la dimensione di 10 MB e 2 GB).Prestazioni di lettura di file su smartphone: memoria interna contro scheda SD e disco rigido del PC

Mi sono sempre chiesto quale hardware sia utilizzato dagli smartphone per la memorizzazione stabile e se le considerazioni sul software (lettura/ricerca di file) siano simili qui per gli hard disk del PC. Ho cercato di trovare informazioni sull'hardware e di avere una sorta di immagine (memoria interna, scheda SD), ma nessuna delle fonti che ho controllato è completa e/o abbastanza specifica. I miei (interrelati) domande sono:

  1. Quali sono le principali differenze che devo prendere in considerazione quando la lettura di file di grandi dimensioni su uno smartphone "moderna" (ad esempio, su un telefono Android 2.2.), Rispetto a fare la stessa cosa con un'applicazione Java per PC? (in termini di prestazioni di ricerca/lettura del disco, ovviamente, la RAM del cellulare è più piccola di un PC, quindi deve essere presa in considerazione in caso di buffer, ecc.)
  2. Quali sono le principali differenze (rilevanti) tra lo storage stabile hardware utilizzato negli smartphone rispetto ai dischi rigidi del PC? (So ​​che questa è una domanda molto ampia, quindi apprezzo anche una risposta molto breve qui e possibilmente alcuni URL esterni affidabili)
  3. In termini di InputStream lettura e ricerca (skipBytes), c'è una differenza (ad esempio su Android) tra l'utilizzo della memoria interna e della scheda SD (non ho intenzionalmente scritto "memoria esterna", perché non è necessariamente la scheda SD su ogni dispositivo)? La scheda SD è più lenta?
  4. Ad esempio, vorrei leggere 2 MB di dati da un file da 2 GB e questi dati da 2 MB sono distribuiti in molte parti diverse/distanti del file. Tutti gli offset sono noti, quindi creo un ordine crescente di offset e quindi utilizzo BufferedInputStream.read() (ad esempio in un DataInputStream) per leggerli (e utilizzare skipBytes() per cercare dove necessario). Pertanto, nel file system sottostante, potrebbe essere necessario "passare attraverso" l'intero file da 2 GB. (Ad esempio, Android utilizza le funzioni di linux per cercare nel file quando necessario.) Tuttavia, è efficiente quanto nell'hard disk del PC? Che dire della scheda SD rispetto all'archiviazione interna in termini di efficienza di ricerca?
  5. Quali sono le velocità di lettura dei dati tipici? (memoria interna dello smartphone contro scheda SD e disco rigido non SSD del PC)

So che il benchmarking per la mia applicazione concreta è un must, ma gradirei anche un chiarimento teorico in merito.

IMPORTANTE: "... è alla ricerca efficiente come in un disco rigido del PC" quando chiedo che, io non (solo) media dei valori assoluti, ma anche il meccanismo di esso. Cioè, se funziona sulla base degli stessi principi logici (= saltare le parti grandi quando è possibile), o ci sono alcuni inconvenienti (ad es. Tale ricerca "saltata" non è possibile su una scheda SD, e quindi saltare è molto di più - - ovvero non proporzionalmente - inutile su un hardware dello smartphone che su un disco rigido del PC).

+2

'Quali sono le velocità di lettura dei dati tipici?' Varia su ogni sistema/dispositivo poiché è vincolante con il processore e le serie di chip. In tal caso, uno smartphone moderno potrebbe essere più veloce di un computer con processore celeron, allo stesso modo – Lucifer

+1

Per quanto riguarda la dichiarazione "La ricerca è sempre un compito lento" nella risposta di Klaus Villaca, non sono d'accordo. Non è generalmente vero; per esempio. in base a ciò che ho sentito, su una scheda SD, potrebbe anche essere ** più veloce ** rispetto a un disco rigido (a causa della natura dell'hardware della scheda SD). Cioè scegliere una posizione casuale potrebbe essere più veloce rispetto a un disco rigido del PC. –

risposta

2

Cercando di rispondere alle vostre domande

  1. C'è solo una differenza, che, se i file sono nel pacchetto applicazione (all'interno di app), perché è necessario aprirlo utilizzando un metodo diverso, se è dentro pacchetto di app e in pacchetto/file/ di quanto tu possa usare lo stesso file File bla ...

  2. La memoria interna dello smartphone è più veloce dell'HDD, anche se la si archivia in una SDCard esterna, questo cambierà a causa del fatto che le SDCard hanno la massima velocità di lettura e scrittura.

  3. Sì, ci sono differenze ... se si sta leggendo da interno o SDCard (non la scheda SD esterna), altri non dovremmo avere dispositivi con 1 o 2 GB e 16 GB per la memorizzazione. Tutto ciò che è all'interno di quella memoria principale verrà eseguito più velocemente.

  4. La ricerca è sempre un'attività lenta, è possibile ottenere una volta tutta la data che è necessario chiudere lo streaming, anche se non si è raggiunta la fine del file. Quello che puoi fare per ottenere più velocemente è ricaricare una cache ogni volta che la tua app ha letto una certa quantità di KB o MB ... di quanto tu possa pranzare un asyncTask per caricarlo, e una volta che il thread principale avrà finito cercherà più dati se esiste Questo dovrebbe accelerare molto, perché cercherete solo nella memoria.

  5. Avrete bisogno di un'app per questo o di scrivere la vostra, che non dovrebbe essere troppo difficile, è possibile utilizzare il gestore e caricare il più possibile in un array o elenco e contare i byte, e ripetere su altri tipi di memoria (scheda SD interna e scheda SD esterna).

+1

Grazie per la risposta. Riguardo alla domanda n. 4: in realtà, questa è la mia domanda più importante, e l'ho intesa da un aspetto diverso da come vi siete avvicinati. (Il mio componente software viene eseguito in un thread separato, quindi la reattività non è un problema per me.) Mi stavo chiedendo in realtà se "cercare" sia efficiente come su un disco rigido del PC. In altre parole, leggere 2 MB non è un grosso problema, quindi la domanda se la ricerca stessa è efficiente o meno. Perché leggiamo 2 MB da un file da 2 GB. Se la ricerca non è efficiente, ci vorrà molto più tempo rispetto alla lettura di un file di 2 MB separato. Su PC, la ricerca è efficiente. –

+0

Non sono d'accordo con l'affermazione "" Ricerca è sempre un'attività lenta ".Non è generalmente vero, ad es.in base a ciò che ho sentito, su una scheda SD, potrebbe anche essere più veloce rispetto a un disco rigido (a causa della natura dell'hardware della scheda SD). Cioè la lettura da una posizione casuale può essere più veloce rispetto a un disco rigido del PC. –

1

La tua domanda è troppo specifica e chiedere troppi dati :-) Penso che sarà difficile trovare un'altra persona con i requisiti specifici.

In generale, la velocità di accesso ai dati della scheda SD dipende non solo dall'hardware del driver (il dispositivo) ma anche dalla scheda stessa e dal software da accedere (versione Android).

D'altra parte è possibile trovare alcune informazioni riguardanti carte di deviazione standard di velocità in:

Anche su Google Play è possibile trovare alcune applicazioni per testare la velocità di una scheda SD sul dispositivo (ricerca per tester scheda SD, strumenti SD, ecc.)

+0

Grazie, anche questo ha aiutato molto (compresi i collegamenti). La domanda non è propriamente specifica, ma sono d'accordo e richiede molti dati. Stackoverflow è anche una sorta di "lessico" online, quindi penso che sia OK. :-) –

Problemi correlati