質問

Androidプラットフォームのテストアプリケーションに取り組んでいます。 sdcardに書き込み/読み取り速度をテストします。 NDKインターフェイスでC言語で書きます。

最初に、それぞれに512のランダムバイトを備えた256ファイルを作成するために、for-loopを書きます。この部分は正常に動作します。 Flag o_creat | o_wronly | o_syncとモード0666を使用してファイルを開きます。コール書き込みの後、データがカードに記述されていることを確認します。

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

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

O_Directフラグを読んで読みました。しかし、Einvalでエラーが発生します。 OpenのManページでは、この機能がプラットフォームで実装されていないためかもしれません。

Androidでノーキャッシュで読む方法について何か考えがありますか?

役に立ちましたか?

解決

操作システムレベルのキャッシュを無効にするために、ルート付き電話が必要になる場合があります。

http://wiki.cyanogenmod.com/index.php?title=sdcardspeedtests

それはまた、積み込みバッファーを圧倒するのに十分な大きさの操作を行うように注意します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top