2012-04-13 26 views
12

W języku Java dostępny jest optymalny rozmiar bufora wynoszący 32 Kb, oparty wyłącznie na architekturze procesora. Czy w telefonach z Androidem Dalvik VM dynamicznie zna właściwy bufor cpu, aby uzyskać największy rozmiar bufora niezależnie od wielu różnych telefonów? Jeśli tak, to w jaki sposób mogę to stwierdzić w czasie wykonywania?Optymalny rozmiar bufora Androida:

Załóżmy, że chcę zoptymalizować działanie nagrywania dźwięku, zwiększając jego rozmiar, a także najszybciej. Wiem, że możesz uzyskać minimalny rozmiar, ale co z optymalnym rozmiarem?

+0

Naprawdę myśli Dalvik VM kiedy mówisz JVM prawda? – slayton

+0

@Slayton tak, Dalvik VM w szczególności – L7ColWinters

+0

Chciałbym również zaznaczyć, że ma to niewiele wspólnego z opóźnieniami w Androidzie i dźwięku, nie jest to jedyny powód słabego opóźnienia, ale jest czynnikiem, który ma wpływ, patrz https://developers.google.com/events/io/sessions/325993827 dla lepszego wyjaśnienia – L7ColWinters

Odpowiedz

40

Może to zależy od tego, jakie masz urządzenie czy umysł.

jednak eksperymentalnie, 8K < rozmiar bufora < 32K działa dobrze i istnieje znaczne ulepszenia wydajności pod 8K. Nieco interesujący jest fakt, że niektóre dane z bufora> 64K wykazały gorszą wydajność niż dane z pod bufora 64K

(Przetestowałem na kilku urządzeń z systemem Android i starał się czytać 20MB plik binarny z różnej wielkości bufora.)

Oto Wynik wyszukiwania i lepiej wkleić je do arkusza kalkulacyjnego, jeśli chcesz przekonwertować dane w ładnej formie. Nagłówek oznacza rozmiar bufora i jednostki są milisekundę

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

huh wygląda na to, że 32K jest tam, gdzie pieniądze są oparte na twoich wykresach – L7ColWinters

+0

@ L7ColWinters yep, Zgadzam się z tobą :) –

+0

Nie mogę zobacz wykres. –

Powiązane problemy