2013-08-07 15 views
9

Poniżej znajduje się migawka dziennika Volley dla żądania obrazu. Prawie połowa czasu renderowania jest spowodowana przyjęciem kolejki sieci. Kolejna jest jeszcze bardziej dramatycznie wysoka, w większości przypadków w kolejce sieciowej. Jak można to zoptymalizować, aby kolejka sieci była szybsza? Co decyduje (oprócz priorytetu wątku, żądania obrazów domyślnie są LOW priorytetowych żądań), szybkość kolejki sieciowej?Jak zoptymalizować kolejkę sieciową w systemie Android Volley? (Volley Google IO 2013)

Uwaga: Uruchomiłem to na Samsung Galaxy S4.

08-07 11:01:09.560: D/Volley(938): [1] MarkerLog.finish: (3662 ms) [ ] http://farm6.static.flickr.com/5487/9452149004_c4ba6d2d97_t.jpg 0x8da7e4ac LOW 84 
08-07 11:01:09.560: D/Volley(938): [1] MarkerLog.finish: (+0 ) [ 1] add-to-queue 
08-07 11:01:09.565: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12239] cache-queue-take 
08-07 11:01:09.565: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12239] cache-miss 
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+1694) [12243] network-queue-take 
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+1852) [12243] network-http-complete 
08-07 11:01:09.570: D/Volley(938): [1] MarkerLog.finish: (+50 ) [12243] network-parse-complete 
08-07 11:01:09.575: D/Volley(938): [1] MarkerLog.finish: (+21 ) [12243] network-cache-written 
08-07 11:01:09.575: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12243] post-response 
08-07 11:01:09.580: D/Volley(938): [1] MarkerLog.finish: (+45 ) [ 1] done 

Oto kolejny, że trwa jeszcze dłużej:

08-07 11:01:09.845: D/Volley(938): [1] MarkerLog.finish: (3871 ms) [ ] http://farm3.static.flickr.com/2827/9451437485_921584cdea_t.jpg 0x24a8bf69 LOW 85 
08-07 11:01:09.860: D/Volley(938): [1] MarkerLog.finish: (+0 ) [ 1] add-to-queue 
08-07 11:01:09.865: D/Volley(938): [1] MarkerLog.finish: (+1 ) [12239] cache-queue-take 
08-07 11:01:09.870: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12239] cache-miss 
08-07 11:01:09.870: D/Volley(938): [1] MarkerLog.finish: (+2543) [12242] network-queue-take 
08-07 11:01:09.875: D/Volley(938): [1] MarkerLog.finish: (+1280) [12242] network-http-complete 
08-07 11:01:09.880: D/Volley(938): [1] MarkerLog.finish: (+26 ) [12242] network-parse-complete 
08-07 11:01:09.885: D/Volley(938): [1] MarkerLog.finish: (+14 ) [12242] network-cache-written 
08-07 11:01:09.885: D/Volley(938): [1] MarkerLog.finish: (+0 ) [12242] post-response 
08-07 11:01:09.890: D/Volley(938): [1] MarkerLog.finish: (+7 ) [ 1] done 
08-07 11:01:09.905: D/dalvikvm(938): GC_CONCURRENT freed 973K, 11% free 14796K/16583K, paused 12ms+6ms, total 56ms 

Odpowiedz

8

network-kolejka-Take jest poświęcenie czasu, ponieważ mają dużą liczbę żądań systemem. Jeśli masz (domyślnie) 4 wątki uruchomione i 8 żądań, to znaczy, że wszystkie pierwsze żądania pobierają dokładnie 500 ms, a kolejka sieciowa dla pozostałych żądań wyniesie 500 ms, ponieważ oczekuje na 500 ms, aby uzyskać miejsce w kolejce.

Można go "wyeliminować", tworząc RequestQueue z wyższym niż defualt DEFAULT_NETWORK_THREAD_POOL_SIZE, ale należy pamiętać, że domyślny jest tam z jakiegoś powodu. Jeśli na przykład pobierzesz 20 obrazów w tym samym czasie, możesz uruchomić warunki OOM. Jednak w przypadku dużej liczby słabych pamięci i złych opóźnień żądanie zwiększenia ich mocy powinno pomóc w osiąganiu wydajności bez narażania warunków zewnętrznych.

+0

Jesteś świetny. Dzięki !!!! 1 –

Powiązane problemy