私は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でキャッシュなしで読み取る方法について何か考えがありますか?