2

私はAndroidプラットフォームでテストアプリケーションに取り組んでいます。SDカードへの書き込み/読み取り速度をテストします。NDKインターフェイスを使用してC言語で記述します。

まず、forループを作成して、それぞれに512個のランダムバイトを持つ256個のファイルを作成します。この部分は正常に機能します。フラグO_CREAT|O_WRONLY | O_SYNCおよびモード0666でファイルを開きます。writeを呼び出した後、sync()を実行して、データがカードに書き込まれていることを確認します。

次に、別の2レベルのforループを作成して、これらのファイルを読み取って速度をテストします。O_RDWR|O_SYNCを使用してファイルを開きます。次に、read()を呼び出します。

読み取り部分を実行するのが初めての場合は、次のようになります。読み取る最初のループは、その後よりも時間がかかります。これは、最初のループの後、プログラムが実際の物理カードではなくキャッシュを読み取るためだと確信しています。

O_DIRECTフラグを読み取ってみました。しかし、それはEINVALでエラーになります。openのマニュアルページには、この機能がプラットフォームに実装されていないことが原因である可能性があります。

Androidでキャッシュなしで読み取る方法について何か考えがありますか?

4

1 に答える 1

0

オペレーティングシステムレベルのキャッシュを無効にするには、root化された電話が必要になる場合があります。

https://web.archive.org/web/20120531024443/http://wiki.cyanogenmod.com/index.php?title=SDCardSpeedTests

また、オンカードバッファを圧倒するのに十分な大きさの操作を実行するように注意します。

于 2010-11-16T18:06:07.657 に答える