16

Javaには、使用されているCPUアーキテクチャのみに基づく32Kbの最適なバッファサイズがあります。Androidスマートフォンでは、Dalvik VMはCPUの適切なキャッシュを動的に認識して、さまざまなスマートフォンに関係なく最大のバッファーサイズを取得しますか?もしそうなら、私は実行時にそれをどのように理解しますか?

バッファを可能な限り最大にし、最速にすることで、オーディオ録音アクティビティを最適化するとします。最小サイズを入手できることは知っていますが、最適なサイズはどうですか?

4

1 に答える 1

51

多分それはあなたが持っているか気にしているデバイスに依存します。

ただし、実験的には、8K <バッファサイズ<32Kで十分に機能し、8Kではパフォーマンスが大幅に向上します。やや興味深いのは、64Kを超えるバッファーを使用する一部のデータは、64K未満のバッファーを使用するデータよりもパフォーマンスが低いことです。

(私はいくつかのAndroidデバイスでテストし、さまざまなバッファサイズの20MBのバイナリファイルを読み取ろうとしました。)

これがexpの結果です。きれいな形式でデータを変換したい場合は、スプレッドシートに貼り付けることをお勧めします。ヘッダーは、バッファーのサイズと単位がミリ秒であることを意味します

グラフ: 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;

ここに画像の説明を入力してください

于 2012-06-27T08:08:42.143 に答える