2012-04-13 31 views
12

In java esiste una dimensione del buffer ottimale di 32 Kb che si basa esclusivamente sull'architettura della cpu utilizzata. Sui telefoni Android la Dalvik VM conosce dinamicamente la cache corretta della CPU per ottenere la dimensione del buffer più grande indipendentemente dai molti telefoni diversi là fuori? Se sì, come potrei capirlo in fase di runtime?Dimensione ottimale del buffer Android

dire che voglio ottimizzare l'attività di registrazione audio, rendendo il buffer più grande può essere e anche il più veloce. So che puoi ottenere la dimensione minima, ma per quanto riguarda la dimensione ottimale?

+0

È davvero dire Dalvik VM quando dici JVM giusto? – slayton

+0

@slayton si, il Dalvik VM in particolare – L7ColWinters

+0

Vorrei anche sottolineare che questo ha un po 'a che fare con la latenza di android e audio, non è l'unica ragione per la scarsa latenza ma è un fattore che contribuisce, vedi https://developers.google.com/events/io/sessions/325993827 per una spiegazione migliore – L7ColWinters

risposta

40

Forse dipende da quale dispositivo si dispone o si mente.

Tuttavia, sperimentalmente, 8K < dimensione del buffer < 32K funziona bene e ci sono miglioramenti significativi delle prestazioni sotto 8K. Un po 'interessante è che alcuni dati con buffer> 64K hanno mostrato prestazioni più povera di dati con meno di 64K tampone

(ho testato su diversi dispositivi Android e provato a leggere 20MB file binario con varie dimensioni del buffer.)

Ecco exp risultato e faresti meglio a incollarli su un foglio di calcolo se vuoi convertire i dati in una bella forma. intestazione significa dimensione del buffer e le unità sono millisecondo

grafico: http://fb.com/photo.php?fbid=468345876512381

    128  256  512  1K  2K  4K  8K  16K  32K  64K  128K 256K 512K 1M  2M  4M  8M  16M 
    Galaxy S  4047 3060 269  155  100  65  64  52  51  45  47  50  49  43  44  46  45  58 
    Optimus LTE 1178 617  322  172  101  65  47  42  41  35  36  39  44  61  56  51  72  60 
    HTC EVO  3971 1884 941  480  251  141  95  69  56  50  48  55  50  49  48  48  48  47   
    Galaxy S2  750  383  210  123  74  50  41  37  35  34  34  37  39  44  46  44  45  44 
    Galaxy Nexus 2272 1216 659  341  187  108  70  52  41  38  38  45  44  54  56  66  68  58 
    Galaxy Note 1549 799  404  220  127  75  58  54  52  56  52  45  44  62  43  39  44  46 

InputStream in = openFileInput(FILE_NAME); 
startTime = System.currentTimeMillis(); 

while (in.read(buffer) > 0) { 
    readCount++; 
} 

elapsedTime = System.currentTimeMillis() - startTime; 

enter image description here

+1

e sembra che 32K sia dove i soldi si basano sui tuoi grafici – L7ColWinters

+0

@ L7ColWinters sì, sono d'accordo con te :) –

+0

Non posso guarda il grafico. –

Problemi correlati