【问题标题】:Android Optimal Buffer SizeAndroid 最佳缓冲区大小
【发布时间】:2012-04-13 15:26:11
【问题描述】:

在 java 中有一个 32 Kb 的最佳缓冲区大小,它完全基于所使用的 cpu 架构。在 Android 手机上,Dalvik VM 是否动态地知道 cpu 的正确缓存以获得最大的缓冲区大小,而与许多不同的手机无关?如果是这样,我将如何在运行时解决这个问题?

假设我想优化音频录制活动,将缓冲区设为最大且最快。我知道您可以获得最小尺寸,但最佳尺寸呢?

【问题讨论】:

  • 当你说 JVM 时,你真的是指 Dalvik VM 对吗?
  • @slayton 是的,特别是 Dalvik 虚拟机
  • 我还想指出,这与 android 和音频延迟有一点关系,它不是延迟差的唯一原因,但它是一个促成因素,请参阅 developers.google.com/events/io/sessions/325993827更好的解释

标签: android buffer


【解决方案1】:

也许这取决于您拥有或介意的设备。

但是,在实验上,8K 确实运行良好,并且在 8K 下有显着的性能提升。有趣的是,一些缓冲区大于 64K 的数据表现出比缓冲区小于 64K 的数据更差的性能

(我已经在几个安卓设备上进行了测试,并尝试读取具有各种缓冲区大小的 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;

【讨论】:

  • 嗯,根据您的图表,看起来 32K 是资金所在的位置
  • @L7ColWinters 是的,我同意你的看法 :)
  • 我无法查看图表。
  • @FelixD。我附上了图表
猜你喜欢
  • 2014-08-22
  • 2010-12-05
  • 2012-02-06
  • 2011-12-16
  • 2013-03-10
  • 1970-01-01
  • 2020-10-07
  • 2012-06-07
  • 1970-01-01
相关资源
最近更新 更多