2012-04-13 21 views
12

En Java existe un tamaño de búfer óptimo de 32 Kb que se basa únicamente en la arquitectura de CPU que se utiliza. En los teléfonos con Android, ¿la VM Dalvik conoce dinámicamente la caché adecuada de la CPU para obtener el tamaño de búfer más grande independientemente de los muchos teléfonos que existen? Si es así, ¿cómo lo descubriría en tiempo de ejecución?Android Optimal Buffer Size

Digamos que quiero optimizar la actividad de grabación de audio haciendo que el búfer sea lo más grande posible y también más rápido. Sé que puede obtener el tamaño mínimo para ello, pero ¿qué pasa con el tamaño óptimo?

+0

que realmente significa Dalvik VM cuando se dice JVM ¿verdad? – slayton

+0

@slayton sí, el Dalvik VM específicamente – L7ColWinters

+0

También me gustaría señalar que esto tiene un poco que ver con la latencia de Android y audio, no es la única razón de la latencia deficiente, pero es un factor contribuyente, consulte https://developers.google.com/events/io/sessions/325993827 para una mejor explicación – L7ColWinters

Respuesta

40

Quizás depende de qué dispositivo tenga o le importe.

Sin embargo, experimentalmente, 8K < tamaño del búfer < 32K funciona bien y hay mejoras de rendimiento significativas bajo 8K. Algo interesante es que algunos datos con tampón> 64 K mostraron un rendimiento más pobre que los datos con bajo 64K búfer

(he probado en varios dispositivos android y trató de leer el archivo binario de 20 MB con diversos tamaño del búfer.)

Aquí es exp de resultado y será mejor que los pegue en la hoja de cálculo si quiere convertir los datos en forma bonita. significa cabecera tamaño del búfer y las unidades son milisegundos

gráfico: 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

eh, parece que 32 K es donde está el dinero según sus gráficos – L7ColWinters

+0

@ L7ColWinters Sí, estoy de acuerdo :) –

+0

No puedo ver el gráfico. –