在java中,最佳缓冲区大小为32 Kb,它完全基于所使用的cpu架构。在Android手机上,Dalvik VM是否能动态地知道cpu的正确缓存,以获得最大的缓冲区大小,而不依赖于许多不同的手机?如果是这样,我怎么能在运行时解决这个问题?
假设我想通过使缓冲区尽可能最大并且也是最快的来优化音频录制活动。我知道你可以得到它的最小尺寸,但最佳尺寸呢?
答案 0 :(得分:46)
也许这取决于您拥有或关注的设备。
然而,实验上, 8K<缓冲区大小< 32K 确实运行良好,并且在8K下有显着的性能改进。有些有趣的是,一些带有缓冲区的数据> 64K表现出比低于64K缓冲区的数据更差的性能
(我在几个Android设备上进行了测试,并试图读取具有各种缓冲区大小的20MB二进制文件。)
这是exp结果,如果你想以漂亮的形式转换数据,最好将它们粘贴到电子表格中。 header表示缓冲区大小,单位为毫秒
图表: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;