2012-04-13 38 views
12

Trong java có kích thước bộ đệm tối ưu là 32 Kb dựa trên cấu trúc CPU đang được sử dụng. Trên điện thoại Android, máy ảo Dalvik có biết chính xác bộ nhớ cache thích hợp của cpu để có được kích thước bộ đệm lớn nhất độc lập với nhiều điện thoại khác nhau không? Nếu vậy làm thế nào tôi sẽ tìm ra điều đó trong thời gian chạy?Kích thước bộ đệm tối ưu của Android

Giả sử tôi muốn tối ưu hóa hoạt động ghi âm bằng cách tạo bộ đệm lớn nhất có thể và cũng là bộ đệm nhanh nhất. Tôi biết bạn có thể nhận được kích thước tối thiểu cho nó nhưng những gì về kích thước tối ưu?

+0

Bạn thực sự có nghĩa là Dalvik VM khi bạn nói JVM phải không? – slayton

+0

@ slayton có, máy ảo Dalvik cụ thể – L7ColWinters

+0

Tôi cũng muốn chỉ ra rằng điều này có một chút để làm với độ trễ âm thanh và android, nó không phải là lý do duy nhất cho độ trễ kém nhưng nó là một yếu tố góp phần, xem https://developers.google.com/events/io/sessions/325993827 để có giải thích tốt hơn – L7ColWinters

Trả lời

40

Có thể nó phụ thuộc vào thiết bị của bạn.

Tuy nhiên, thử nghiệm, 8K < kích thước bộ đệm < 32K hoạt động tốt và có cải thiện hiệu suất đáng kể dưới 8K. Hơi thú vị là một số dữ liệu với bộ đệm> 64K cho thấy hiệu suất kém hơn so với dữ liệu với dưới 64K đệm

(tôi đã thử nghiệm trên nhiều thiết bị Android và cố gắng đọc 20MB tập tin nhị phân với kích thước bộ đệm khác nhau.)

Dưới đây là kết quả tìm kiếm và bạn nên dán chúng vào bảng tính nếu bạn muốn chuyển đổi dữ liệu ở dạng đẹp. tiêu đề có nghĩa kích thước bộ đệm và các đơn vị là millisecond

đồ thị: 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 có vẻ như 32K là nơi tiền có được dựa trên đồ thị của bạn – L7ColWinters

+0

@ L7ColWinters yep, tôi đồng ý với bạn :) –

+0

Tôi không thể xem biểu đồ. –

Các vấn đề liên quan