安卓最佳缓冲区大小

16

在Java中,有一个最佳缓冲区大小为32Kb,该大小仅基于正在使用的CPU架构。在Android手机上,Dalvik VM是否动态地知道如何获取最大缓冲区大小并独立于许多不同的手机?如果是这样,我如何在运行时找到它?

假设我想通过使缓冲区尽可能大且更快地优化音频记录活动。我知道可以获取其最小尺寸,但是最佳尺寸怎么办?


当你说JVM的时候,你真正指的是Dalvik VM,对吗? - slayton
@slayton 是的,Dalvik虚拟机特别指定 - L7ColWinters
我还想指出这与Android和音频延迟关系不大,它并不是导致延迟差的唯一原因,但它是一个影响因素。更好的解释请参见https://developers.google.com/events/io/sessions/325993827。 - L7ColWinters
1个回答

52
也许这取决于您使用的设备或者心里感受。然而,实验表明8K < 缓冲区大小 < 32K可以很好地工作,并且在少于8K的情况下有显着的性能提升。有点有趣的是,一些具有大于64K缓冲区的数据显示出比小于64K缓冲区的数据性能更差。
(我在几个安卓设备上进行了测试,尝试使用各种缓冲区大小读取20MB二进制文件。)
以下是实验结果,如果要将数据转换成漂亮的格式,请将它们粘贴到电子表格中。标题表示缓冲区大小,单位为毫秒
图表: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;

在这里输入图片描述


1
嗯,看起来根据你的图表,32K 才是钱的来源。 - L7ColWinters
@L7ColWinters,是的,我同意你的看法 :) - Joon Hong
我无法查看图表。 - Felix D.
1
@FelixD。我附上了图表。 - Joon Hong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接