web-dev-qa-db-fra.com

Android Taille de tampon optimale

Dans Java il y a une taille de tampon optimale de 32 Kb qui est basée uniquement sur l'architecture cpu utilisée. Sur Android = téléphones le Dalvik VM connaît-il dynamiquement le cache approprié du processeur pour obtenir la plus grande taille de mémoire tampon indépendamment des nombreux téléphones différents? Si oui, comment pourrais-je le déterminer au moment de l'exécution?

Disons que je souhaite optimiser une activité d'enregistrement audio en faisant du tampon le plus grand possible et aussi le plus rapide. Je sais que vous pouvez obtenir la taille minimale, mais qu'en est-il de la taille optimale?

16
L7ColWinters

Cela dépend peut-être de votre appareil ou de votre esprit.

Cependant, expérimentalement, 8K <taille du tampon <32K fonctionne bien et il y a des améliorations de performances significatives sous 8K. Un peu intéressant est que certaines données avec un tampon> 64K ont montré de moins bonnes performances que les données avec un tampon inférieur à 64K

(J'ai testé sur plusieurs Android et essayé de lire un fichier binaire de 20 Mo avec différentes tailles de mémoire tampon.)

Voici le résultat exp et vous feriez mieux de les coller dans une feuille de calcul si vous voulez convertir des données sous une forme jolie. en-tête signifie taille du tampon et les unités sont milliseconde

graphique: 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

47
Joon Hong